我想在我的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/

10-15 21:12