Как использовать внедрение зависимостей в модели ASP.NET MVC? - PullRequest
2 голосов
/ 27 октября 2009

Я хотел бы добавить зависимость в модель ASP.NET MVC, но не могу понять, где в конвейере выполнить внедрение.

Это очень просто с ControllerFactory, но не так много, когда дело касается моделей.

Ответы [ 7 ]

0 голосов
/ 27 октября 2009

Оформить заказ этот образец Я создал на основе объяснений Айенде в своем блоге. По сути, я использую Castle в качестве своего контейнера IoC и использую Mvc Contrib, чтобы добавить все контроллеры в контейнер и заставить Mvc получить их из него. Затем я могу добавить что-нибудь в контейнеры, например, NHibernate ISession.

Если вы хотите внедрить материал в классы (сущности) модели, NH теперь поддерживает Внедрение зависимостей объектов, управляемых Hibernate . См. this , this и this для конкретных примеров для Spring и Windsor.

0 голосов
/ 03 ноября 2009

То, о чем вы говорите, больше похоже на шаблон Active Record.

Возможность AR будет зависеть от того, какой ORM / DAO вы используете.

Шаблон AR обычно лучше подходит для небольших проектов.

0 голосов
/ 27 октября 2009

Вы абсолютно уверены, что вам нужно внедрить зависимость в саму модель вашего домена? Сущность или бизнес-объект обычно инкапсулируют состояние и предоставляют методы для изменения этого состояния в соответствии с бизнес-правилами. Код, который не попадает в эту категорию, обычно находится в службе. Вы вообще прочитали концепцию доменной службы ? Возможно, использование одного из них будет лучше отвечать вашим потребностям, и вам не нужно будет вводить какие-либо зависимости в сам домен.

0 голосов
/ 27 октября 2009

Я бы порекомендовал рассмотреть архитектуру S # arp http://www.sharparchitecture.net/

Аддон фреймворка с открытым исходным кодом для asp.net mvc.

0 голосов
/ 27 октября 2009

Я закончил тем, что создал сервисный локатор: http://martinfowler.com/articles/injection.html#UsingAServiceLocator

Мне проще, чем иметь дело с контейнером IoC и пытаться вставить мой код DI по всему конвейеру MVC.

0 голосов
/ 27 октября 2009

обычно я вставляю зависимости в контроллер, как это

PersonController(IPersonRepository r)
{
\\ constrtuctor code
}

в моделях, вероятно, когда требуется какой-то экземпляр, который наследует интерфейс, вы делаете что-то подобное:

var r = container.Resolve<IPersonRepository>();
0 голосов
/ 27 октября 2009

Вы можете найти разумные инструкции по использованию блога Shiju Vargheses: Совет ASP.NET MVC: внедрение зависимостей с помощью блока приложений Unity

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...