比如我在业务层有一个类: public class Global { public static string UserID=""; public static string UserName=""; } 然后我在数据访问层想获取当前登录的用户名,该怎么操作??下层理论上是不能访问上层数据的,我在数据访问层一引用业务层,就提示"将导致循环依赖项",这种情况下该怎么样解决??
感谢danjiewu ,这种方法应该是比较完美的解决了我的问题,不过你的代码同样有一个问题,public interface ICurrentUserProvider
{
User GetCurrentUser();
}
这里User应该在哪里定义?一般情况下,User肯定是在业务层定义,那么这里同样无法获取到User的定义!除非我直接定义成string就不会有问题了。
还有ICurrentUserProvider的实现,
public class HttpCurrentUserProvider : ICurrentUserProvider{
public User GetCurrentUser(){
return HttpContext.Current.Session["CurrentUser"] as User;
}
}
这段代码应该写在数据访问层吗??
可以这样解决,在数据访问层定义一个接口
public interface ICurrentUserProvider
{
User GetCurrentUser();
}
然后定义一个static变量:
public static class CurrentUserProvider{
public static ICurrentUserProvider Provider;
}
ICurrentUserProvider在不同的架构中实现是不同的,比如在Web程序中可以通过session来获得用户信息:
public class HttpCurrentUserProvider : ICurrentUserProvider{
public User GetCurrentUser(){
return HttpContext.Current.Session["CurrentUser"] as User;
}
}
然后在global.asax的Application_Start里设置
CurrentUserProvider.Provider = new HttpCurrentUserProvider();
使用static变量只是为了简化问题,如果用工厂模式或者使用Spring配置的话也都一样。