我正在努力让NInject Conventions工作。我有以下代码:
public class DataAccessInjectionModule : NInjectModule
{
var scanner = new AssemblyScanner();
scanner.From(new[] {
"Domain.dll",
"DataAccess.dll"
});
scanner.WhereTypeInheritsFrom(typeof(IRepository<>));
scanner.BindWith<DefaultBindingGenerator>(); // I have also tried new GenericBindingGenerator(typeof(IRepository<>))
scanner.InRequestScope();
Kernel.Scan(scanner);
}
所以基本上我试图将Domain.dll中的接口(例如 IFooRepository )绑定到DataAccess中的具体类(例如 FooRepository )的.dll。
但是,当我稍后尝试从内核中获取类时,我得到错误: 没有匹配的绑定可用,并且该类型不可自我绑定。
我有什么遗失的吗?
答案 0 :(得分:1)
问题是IFooRepository
不是来自IRepository<>
,而是来自IRepository<IFoo>
。如果你想使用接口作为条件,你必须使用Where(t =&gt; t.DoSomeReflectionMagicHere())来实现你自己的条件,并做一些反射魔术。另一种方法是使用名称作为条件,例如绑定名称中包含Repository的所有类。