如何在Ninject中绑定Generic类型的接口
我是Ninject的新手,在我实现通用存储库模式时发现自己陷入困境。 我想将依赖项IRepository 绑定到类ConcreteRepository ,其中ConcreteRepository 实现IRepository ,EntityType实现IEntityType。 我试过这个:
kernel.Bind<IRepository>().To<ConcreteRepository>();
…但是Ninject不会接受它,因为它不知道或不关心EntityType实现IEntityType。 我怎样才能绑定这种依赖?
UPDATE
这是我得到的错误:
错误3类型’ICM.Dependency.Repository.ConcreteRepository’不能在generics类型或方法’Ninject.Syntax.IBindingToSyntax.To()’中用作类型参数’TImplementation’。 没有从“ConcreteRepository ”到“IRepository ”的隐式引用转换。
解
我仍然不太明白为什么我的绑定不起作用,但显然我在那里使用generics不正确。 因此,该解决方案与NInject无关。 我结束了指定ConcreteRepository以显式连接IEntityType和TEntityType:
public class ConcreteRepository : IRepository where TEntity : TInterface { ... }
然后注射可以写成如下:
kernel.Bind<IRepository>().To<ConcreteRepository>()
kernel.Bind(typeof(IRepository<>)).To(typeof(SimpleRepository<>));
如果你想在这里看看我的那个: http : //blog.staticvoid.co.nz/2011/10/staticvoid-repository-pattern-nuget.html我有绑定的例子
编辑:
你得到的错误是说你的具体存储库不是你要绑定的通用存储库的实例,即你需要这样做
public class ConcreteRepository : IRepository{}
不
public class ConcreteRepository : IRepository {}