我想在TenantId
中设置DbContext
,以便我可以使用它过滤所有查询。
我已设置过滤器,但我无法将TenantId
设置为DbContext
。
困难的原因是用于获取当前登录用户的UserManager
(以及TenantId
)取决于DbContext
从数据库获取数据。因此,我无法使用依赖注入导入UserManager
,因为它会导致循环依赖。 UserManager
取决于DbContext
,DbContext
取决于UserManager
。
还有其他方法可以配置吗?
答案 0 :(得分:0)
如果我理解你的问题,你会遇到这样的情况:
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注册为单身