Связывание общего репозитория и конкретного репозитория с Ninject 2.2 - PullRequest
3 голосов
/ 30 августа 2011

У меня есть IRepository, который я реализовал в Repository, и я расширил Repository для определенного типа, поскольку UsersRepository. Мне нужно связать все типы, используя общее связывание для Ninject, однако при запросе экземпляра для IRepository мне нужно получить UsersRepository вместо Repository. 1001 *

Bind<IDbContext>().To<SMSDataContext>()
.WithConstructorArgument("connectionStringName", "dbcsname");

Здесь я связываю общий репозиторий:

Bind(typeof(IRepository<>)).To(typeof(Repository<>))
.WithConstructorArgument("dbContext",new SMSDataContext("dbcsname"));        

Здесь я пытаюсь привязать конкретный экземпляр:

Bind<IRepository<Setting>>().ToConstant(settingsRepository);

Пробовал разные подходы с ".ToConstant" и только с ".To" также пытался привязать к конкретной реализации следующим образом:

 UsersRepository usersRepository = new UsersRepository(new SMSDataContext("SMSDB"));
 Bind<IRepository<Setting>>().To<SettingsRepository>().WithConstructorArgument("dbContext", new SMSDataContext("dbscname")); ;  

Пожалуйста, сообщите.

1 Ответ

3 голосов
/ 31 августа 2011

В настоящее время возможно использование только некоторых читов, потому что открытые общие привязки имеют тот же приоритет, что и закрытые общие привязки. Но вы можете увеличить приоритет привязки, добавив условие.

Bind<IRepository<Setting>>().ToConstant(settingsRepository).When(ctx => true);
...