Как связать интерфейсы универсального-типа в Ninject

Я довольно новичок в Ninject и обнаружил, что спотыкаюсь, когда пришел к реализации универсального шаблона репозитория. Я хочу связать зависимость IRepository с классом ConcreteRepository , где ConcreteRepository реализует IRepository, а EntityType реализует IEntityType. Я пробовал это :

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>>()
21
задан McGarnagle 21 April 2012 в 19:01
поделиться