我有三个项目Ninject绑定:绑定到不同类型的相同界面。为什么有效?
- Application.Infrastructure
- Application.A(具有
Application.Infrastructure
参考) - Application.B(具有
Application.Infrastructure
参考) - Application.Web(具有从所有参考)
在Application.Infrastructure
我有一个通用的仓库类
public interface IRepository<T>
{
T FirstOrDefault(Expression<Func<T, bool>> where);
}
在Application.A
我有这个库
public class ApplicationARepository<T> : IRepository<T>
{
private readonly IApplicationADBContext _context;
public ApplicationARepository(IApplicationADBContext context)
{
_context = context;
}
// implementation
}
的实现在Application.B
我有储存库接口的另一实施
public class ApplicationBRepository<T> : IRepository<T>
{
private readonly IApplicationBDBContext _context;
public ApplicationBRepository(IApplicationBDBContext context)
{
_context = context;
}
// implementation
}
在Application.Web我结合使用Ninject
接口// Bind implementations from Application.A
kernel.Bind<IApplicationADBContext>().To<ApplicationADBContext>().InRequestScope();
kernel.Bind(typeof(IRepository<>)).To(typeof(ApplicationARepository<>));
// Bind implementations from Application.B
kernel.Bind<IApplicationBDBContext>().To<ApplicationBDBContext>().InRequestScope();
// Here should fail. I already binded typeof(IRepository<>) to typeof(ApplicationARepository<>)
kernel.Bind(typeof(IRepository<>)).To(typeof(ApplicationBRepository<>));
即使我将相同的接口绑定到两种不同的类型,但没有指定任何.Where()子句,它仍在工作,我不会收到任何错误。
为什么? Ninject如何知道如何区分它们?
什么行代码你期望失败?第二个绑定或行,你尝试解析接口? –
接口是不同的..'BDB'和'ADB' ... –
第二次绑定时,我将相同的接口绑定到另一种类型 – Catalin