【发布时间】:2013-01-16 11:42:17
【问题描述】:
我有三个项目
- 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... -
将同一个接口绑定到另一种类型时的第二次绑定
-
您的意思是存储库?从你的例子中取出上下文..这很令人困惑:(
-
查看这篇文章,我认为这解释了它为什么/如何工作github.com/ninject/ninject/wiki/Multi-injection。
标签: c# dependency-injection ninject