我有三个项目
- 应用程序.基础设施
- 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 如何知道如何区分它们?