使用 Ninject 的单个接口的多个 Dbcontext 绑定



我有2个Dbcontext类AdminDbContext,和AppDbContext用于我的Web api项目,它们都实现了IDbcontext。

我的问题是 Ninject 无法解决依赖关系,所以我得到无参数构造函数错误

我没有任何特定条件,所以上下文绑定似乎很难,请帮助解决这个问题

如果我正确理解了这个问题,则无法将 IDbContext 注入您的类中,因为您有时需要 AdminDbContext,有时需要在同一类中使用 AppDbContext,因此您无法编写 Ninject 绑定。

在这种情况下,您可以编写一个 IDbContextFactory 接口并注入该接口。

public interface IDbContextFactory
{
    IDbContext CreateAdminContext();
    IDbContext CreateAppContext();
}
public class DbContextFactory : IDbContextFactory
{
    //implementation of above interface methods to return the relevant context.
}

然后你的类可以注入它而不是上下文

public class YourClass
{
    private readonly IDbContextFactory _factory;
    public YourClass(IDbContextFactory factory)
    {
        _factory = factory;
    }
    public YourAdminMethod()
    {
        using (var context = _factory.CreateAdminContext())
        {
            //do stuff
        }
    }
    public YourAppMethod()
    {
        using (var context = _factory.CreateAppContext())
        {
            //do stuff
        }
    }
}

然后你只需要在 IDbContextFactory 的 Ninject 绑定中有一个绑定,它可以是单例。

kernel.Bind<IDbContextFactory>().To<DbContextFactory>().InSingletonScope();

最新更新