usando - tipos genericos en c#
Cómo enlazar interfaces de tipo genérico en Ninject (1)
kernel.Bind(typeof(IRepository<>)).To(typeof(SimpleRepository<>));
Eche un vistazo a mi uno si quiere aquí: http://blog.staticvoid.co.nz/2011/10/staticvoid-repository-pattern-nuget.html Tengo ejemplos vinculantes
EDITAR:
El error que está obteniendo indica que su repositorio concreto no es una instancia del genérico al que desea enlazar, es decir, tendrá que hacer esto
public class ConcreteRepository<ConcreteEntity> : IRepository<IEntity>{}
no
public class ConcreteRepository<ConcreteEntity> : IRepository<ConcreteEntity>{}
Soy bastante nuevo en Ninject, y me encontré tropezando cuando llegué a implementar un patrón de repositorio genérico. Quiero vincular una dependencia IRepository <IEntityType> a una clase ConcreteRepository <EntityType> donde ConcreteRepository <T> implementa IRepository <T> y EntityType implementa IEntityType. Intenté esto:
kernel.Bind<IRepository<IEntityType>>().To<ConcreteRepository<EntityType>>();
... pero Ninject no lo tomará porque no sabe o le importa que EntityType implemente IEntityType. ¿Cómo puedo ir atando esta dependencia?
ACTUALIZAR
Este es el error que estoy recibiendo:
Error 3 El tipo ''ICM.Dependency.Repository.ConcreteRepository'' no se puede usar como parámetro de tipo ''TImplementation'' en el tipo o método genérico ''Ninject.Syntax.IBindingToSyntax.To ()''. No hay una conversión de referencia implícita de ''ConcreteRepository <EntityType>'' a ''IRepository <IEntityType>''.
SOLUCIÓN
Todavía no entiendo bien por qué mi enlace no funciona, pero evidentemente estaba usando genéricos de forma incorrecta allí. Como tal, la solución no se relaciona realmente con NInject. Terminé de especificar ConcreteRepository para conectar explícitamente IEntityType con TEntityType:
public class ConcreteRepository<TInterface, TEntity> : IRepository<TInterface> where TEntity : TInterface { ... }
Entonces la inyección se puede escribir de la siguiente manera:
kernel.Bind<IRepository<IEntityType>>().To<ConcreteRepository<IEntityType,EntityType>>()