2013-04-10 1 views
4

У меня есть приложение Windows Service, где я бы хотел использовать Ninject для моих классов обслуживания. Есть несколько классов обслуживания, которые используют другие, скажем, «нижний уровень» или более общие классы обслуживания. Каждой службе обычно нужен репозиторий для доступа к данным.Как сообщить Ninject ввести один и тот же экземпляр для вложенных конструкторов?

Так, например, у меня есть интерфейс IRepository, интерфейс IServices1 и IServices2. Существуют реализации Services1 и Services2 последних двух, оба имеют параметр конструктора типа IRepository. Теперь предположим, что реализация Services1 хотела бы использовать некоторые методы интерфейса IServices2, поэтому я добавляю еще один параметр конструктора в Services1 с типом IServices2. Теперь, когда я вручную создать экземпляр класса обслуживания1, я бы тинги как:

var repo = new MyRepository(); // implementing IRepository 
var service1 = new Services1(repo, new Services2(repo)); 

Таким образом, я могу гарантировать, что оба сервиса будут работать с тем же хранилище (что является основным требованием для меня).

Как я могу использовать Ninject для этого scneario для подготовки экземпляра IServices1 для меня с надлежащей инъекцией IRepository? Или у меня есть какая-то серьезная ошибка дизайна при таком подходе?

Я не на платформе MVC, поэтому у меня нет области запроса здесь, которая, я думаю, выполнит задачу, если это MVC.

ответ

4

Посмотрите на расширение NamedScope. Есть примеры для этого сценария.

https://github.com/ninject/ninject.extensions.namedscope/wiki

+1

Спасибо за ссылку, то InCallScope, кажется, только то, что мне нужно, я дам ему попробовать в ближайшее время. –

Смежные вопросы