无法使NInject约定有效

时间:2011-04-13 04:03:05

标签: ninject

我正在努力让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。

但是,当我稍后尝试从内核中获取类时,我得到错误: 没有匹配的绑定可用,并且该类型不可自我绑定。

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:1)

问题是IFooRepository不是来自IRepository<>,而是来自IRepository<IFoo>。如果你想使用接口作为条件,你必须使用Where(t =&gt; t.DoSomeReflectionMagicHere())来实现你自己的条件,并做一些反射魔术。另一种方法是使用名称作为条件,例如绑定名称中包含Repository的所有类。