Я довольно новичок в Ninject и обнаружил, что спотыкаюсь, когда пришел к реализации универсального шаблона репозитория. Я хочу связать зависимость IRepository
kernel.Bind<IRepository<IEntityType>>().To<ConcreteRepository<EntityType>>();
... но Ninject не примет это, потому что он не знает и не заботится о том, что EntityType реализует IEntityType. Как я могу привязать эту зависимость?
ОБНОВЛЕНИЕ
Это ошибка, которую я получаю:
Ошибка 3 Тип «ICM.Dependency.Repository.ConcreteRepository» не может использоваться в качестве параметра типа «TImplementation» в универсальном типе или методе «Ninject.Syntax»..IBindingToSyntax.To()'. Неявное преобразование ссылок из ConcreteRepository
в IRepository отсутствует.
РЕШЕНИЕ
Я до сих пор не совсем понимаю, почему моя привязка не работает, но, очевидно, я неправильно использовал дженерики. Таким образом, решение на самом деле не относится к NInject. Я закончил указывать ConcreteRepository для явного соединения IEntityType с TEntityType :
public class ConcreteRepository<TInterface, TEntity> : IRepository<TInterface> where TEntity : TInterface {... }
. Тогда внедрение можно записать следующим образом:
kernel.Bind<IRepository<IEntityType>>().To<ConcreteRepository<IEntityType,EntityType>>()