我是相当新的Ninject,发现自己绊倒,当我来到了实现一个通用的存储库模式。 我想的依赖性IRepository <IEntityType>结合于类ConcreteRepository <的EntityType>其中ConcreteRepository <T>实现IRepository <T>和的EntityType实现IEntityType。 我尝试这样做:
kernel.Bind<IRepository<IEntityType>>().To<ConcreteRepository<EntityType>>();
......但Ninject不会采取,因为它不知道或关心的EntityType实现IEntityType。 我该如何去结合这种依赖?
UPDATE
这是我得到的错误:
错误3类型“ICM.Dependency.Repository.ConcreteRepository”不能在通用类型或方法“Ninject.Syntax.IBindingToSyntax.To()”被用作类型参数“TImplementation”。 存在从 'ConcreteRepository <的EntityType>' 到 'IRepository <IEntityType>' 没有隐式引用转换。
解
我还是不太明白,为什么我绑定不工作,但显然我使用泛型错误那里。 这样的解决方案并没有真正涉及到NInject。 我结束指定ConcreteRepository明确与TEntityType连接IEntityType:
public class ConcreteRepository<TInterface, TEntity> : IRepository<TInterface> where TEntity : TInterface { ... }
那么注射可以写成如下:
kernel.Bind<IRepository<IEntityType>>().To<ConcreteRepository<IEntityType,EntityType>>()