使用Ninject与单个接口进行多个Dbcontext绑定

时间:2016-02-26 07:07:53

标签: entity-framework asp.net-web-api dependency-injection ninject

我有2个Dbcontext类AdminDbContext,以及我的web api项目的AppDbContext,它们都实现了IDbcontext。

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

我没有任何特定条件,所以上下文绑定看起来很难,请帮助这个

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,你就不能将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
        }
    }
}

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

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