我对 Ninject 相当陌生,当我开始实现通用存储库模式时,我发现自己磕磕绊绊。 我想将依赖项 IRepository
kernel.Bind<IRepository<IEntityType>>().To<ConcreteRepository<EntityType>>();
。但是Ninject不会接受这一点,因为它不知道也不关心EntityType实现了IEntityType。 如何绑定此依赖项?
更新
这是我得到的错误:
错误 3 类型"ICM.Dependency.Repository.ConcreteRepository"不能用作泛型类型或方法"Ninject.Syntax.IBindingToSyntax.To()"中的类型参数"TImplementation"。没有从"ConcreteRepository
"到"IRepository "的隐式引用转换。
溶液
我仍然不太明白为什么我的绑定不起作用,但显然我在那里错误地使用了泛型。 因此,该解决方案与NInject无关。 我最后指定了 ConcreteRepository 以显式连接 IEntityType 和 TEntityType:
public class ConcreteRepository<TInterface, TEntity> : IRepository<TInterface> where TEntity : TInterface { ... }
那么注入可以写成如下:
kernel.Bind<IRepository<IEntityType>>().To<ConcreteRepository<IEntityType,EntityType>>()
kernel.Bind(typeof(IRepository<>)).To(typeof(SimpleRepository<>));
如果你想在这里看看我的一个:http://blog.staticvoid.co.nz/2011/10/staticvoid-repository-pattern-nuget.html 我有绑定的例子
编辑:
您收到的错误是说您的具体存储库不是您要绑定到的通用存储库的实例,即您需要这样做
public class ConcreteRepository<ConcreteEntity> : IRepository<IEntity>{}
不
public class ConcreteRepository<ConcreteEntity> : IRepository<ConcreteEntity>{}