2013-06-27 3 views
1

Я работаю над приложением MVC4, используя инъекцию зависимостей и контейнер Unity. Я могу разрешить зависимости, реализуя класс IDependencyResolver в веб-проекте. Есть ли аналогичный способ разрешения зависимостей при запуске в поддержке библиотек классов?Как решить зависимости между библиотеками классов?

ответ

2

Есть ли аналогичный способ разрешения зависимостей при запуске в поддержке библиотек классов?

Вызов непосредственно в контейнер или фасад (например, в DependencyResolver) является образцом, который известен как Service Locator pattern и большинство специалистов, которые считаются an anti-pattern.

Поэтому вместо вызова в локатор сервисов из классов в проектах библиотеки классов используйте dependency injection pattern, где вы вставляете все зависимости, необходимые классу в его конструкторе.

+0

Прежде чем вводить зависимость в конструктор, мне нужно будет зарегистрировать зависимости. Это выполняется в MVC, реализуя интерфейс IDependencyResolver во время инициализации. Я хотел бы зарегистрировать зависимости поддержки библиотеки классов с бизнес-логикой при запуске сборки. Я ищу интерфейс или контекст для регистрации зависимостей при запуске проекта библиотеки классов. – AnxiousdeV

+0

Не имеет значения, что эти компоненты определены в другой сборке. Все они должны быть зарегистрированы на пути запуска вашего приложения (в MVC это событие «Application_Start»). Это уникальное место называется [Корень композиции] (http://blog.ploeh.dk/2011/07/28/CompositionRoot/). – Steven

+0

Хорошо, это, кажется, имеет смысл, но не приведет ли это к тому, что проект MVC будет зависеть от проектов поддержки библиотеки классов? У меня есть трехуровневое приложение, бизнес-интерфейс (MVC Project) (библиотека классов) и данные (библиотека классов). Я хочу добавить зависимости в бизнес-проект из проекта Data и в проект пользовательского интерфейса из бизнес-проекта. Если я зарегистрирую зависимости от всех проектов в проекте пользовательского интерфейса, мне нужно будет добавить ссылку на проект пользовательского интерфейса для проектов «Бизнес и данные» и тем самым создать зависимость. – AnxiousdeV