Сохранение компонента внедрения зависимостей вне основной базы кода - PullRequest
2 голосов
/ 18 августа 2011

У меня есть приложение MVC, которое использует ninject для внедрения сервисных зависимостей в контроллеры, и оно работает хорошо.Однако у меня также есть некоторые доменные объекты, которые требуют этих сервисов в своих конструкторах, и я хочу разрешить эти зависимости с помощью ninject, но не хочу ссылаться на ninject непосредственно в моей сборке объектов домена.Я прочитал много вопросов и ответов здесь, но для меня все еще не ясно, как это сделать.Например, у меня есть объект домена ShoppingCart, которому нужен экземпляр IProductCatalogService, переданный его конструктору.Каков наилучший шаблон для создания экземпляра корзины для покупок?Я мог бы иметь ссылку на корневое ядро ​​и обратиться к нему, но это означало бы наличие ссылок на ninject в сборке моего домена.Должен ли я обернуть доступ к ядру в фабричный класс?

Любые мысли или предложения приветствуются!

1 Ответ

1 голос
/ 18 августа 2011

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

С точки зрения домена, я бы предположил, что ShoppingCart будет состоять из множества «предметов», иметь такие свойства, как итоговое и т. Д. И, возможно, будет передан службе заказа. Действия вашего контроллера будут обновлять домен корзины покупок путем добавления элементов, удаления элементов и т. Д. И т. Д.

Если вам действительно нужно рассмотреть эту опцию, стоит использовать commonservicelocator. Это выделит вашу (прямую) зависимость от ninject.

...