我有2个Dbcontext类AdminDbContext,以及我的web api项目的AppDbContext,它们都实现了IDbcontext。
我的问题是Ninject无法解析依赖,所以我得到无参数构造函数错误
我没有任何特定条件,所以上下文绑定看起来很难,请帮助这个
答案 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();