我想在我的TenantId
中设置DbContext
,以便可以使用它过滤所有查询。
我已经设置了过滤器,但是我很难将TenantId
设置为DbContext
。
造成这种困难的原因是,用于获取当前登录用户的UserManager
(因此是TenantId
)取决于DbContext
从数据库中获取数据。所以我不能使用依赖注入导入UserManager
,因为它会导致循环依赖。 UserManager
取决于DbContext
,而DbContext
取决于UserManager
。
还有其他配置方法吗?
最佳答案
如果我正确理解了您的问题,那么您会遇到以下情况:
public class UserManager : IUserManager
{
public UserManager(IDBContext db, ... )
{
_context = db;
...
}
private IDBContext _context ;
public UserInfo User {get; set;}
// ... Some logic that fills User
}
public class DBContext : IDBContext
{
public DBContext(...)
{
...
}
// ... Here you need UserInfo to filter.
}
稍微更改应用程序的结构,使其如下所示:
public class UserProvider : IUserProvider
{
public UserInfo User {get; set;}
}
public class UserManager : IUserManager
{
public UserManager(IDBContext db, IUserProvider provider, ... )
{
_context = db;
_userProvider = provider;
...
}
private IDBContext _context ;
private IUserProvider _userProvider;
// ... Some logic that fills _userProvider.UserInfo
}
public class DBContext
{
public DBContext(IUserProvider provider, ...)
{
_userProvider = provider;
...
}
private IUserProvider _userProvider;
// ... Here you can use _userProvider.UserInfo
}
唯一的要求:在您的依赖注入框架中将IUserProvider注册为单例
关于c# - 如何解决DbContext中的循环依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49483511/