Подтвердить что ты не робот

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

Я новичок в 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" не может использоваться как параметр типа "TImplementation" в родовом типе или методе "Ninject.Syntax.IBindingToSyntax.To()". Нет никакого неявного преобразования ссылок из "ConcreteRepository <EntityType> " в "IRepository <IEntityType> ".

Решение

Я до сих пор не совсем понимаю, почему моя привязка не работает, но, очевидно, я неправильно использовал дженерики. Таким образом, решение действительно не связано с NInject. Я закончил указывать ConcreteRepository для явного подключения IEntityType с TEntityType:

public class ConcreteRepository<TInterface, TEntity> : IRepository<TInterface> where TEntity : TInterface { ... }

Тогда инъекцию можно записать следующим образом:

kernel.Bind<IRepository<IEntityType>>().To<ConcreteRepository<IEntityType,EntityType>>()
4b9b3361

Ответ 1

kernel.Bind(typeof(IRepository<>)).To(typeof(SimpleRepository<>));

Взгляните на мой, если вы хотите: http://blog.staticvoid.co.nz/2011/10/staticvoid-repository-pattern-nuget.html У меня есть примеры привязки

EDIT:

Ошибка, которую вы получаете, говорит о том, что ваш конкретный репозиторий не является экземпляром родового, к которому вы хотите привязать, т.е. вам нужно будет сделать это

public class ConcreteRepository<ConcreteEntity> : IRepository<IEntity>{}

not

public class ConcreteRepository<ConcreteEntity> : IRepository<ConcreteEntity>{}