Lixoradka
@Lixoradka
.Net разработчик

Как использовать Unity IoC в приложении с N-Layer архитектурой?

Вот уже долгое время пытаюсь освоить Unity IoC для применения Dependency Injection в моих приложениях. Каждый раз все стремление разбивается об одни и те же проблемы. Но об этом далее и по порядку.

Я пишу ASP.NET MVC приложение. Для приложения выбрана архитектура N-Layer. Исходя из архитектуры, в приложении 4 слоя (DAL, BLL, Web, DTO). Каждый слой зависит от своих соседей и поэтому используется инверсия управления.
Ранее я использовал для DI пакет Ninject, который позволял делать свойства, вида
[Inject]
public IMyInterface injectetProp {get; set;}

в спец. файле я указывал для какого интерфейса какой экземпляр использовать и все. Каждый раз, когда конструировался например контроллер, сразу инжектировался объект, который этот интерфейс реализовывал.

Несколько позже мне рассказали про Unity и про то, что его конфигурацию можно задавать в конфигурационных файлах приложения, тем самым исключается перекомпиляция проекта в случае, если нужно изменить зависимости. Это не могло меня не удивить. И вот я решил перейти на Unity.
Я прочитал много статей про DI с использованием Unity, но везде было отдельно либо конфигурирование, либо использование. Мне не удалось найти ответа на мои вопросы, вероятно просто проглядел и прошу вас ткнуть так сказать носом, где это расписано =)

Собственно сами вопросы:
– Возможно ли вынести конфигурацию DI в web.config, и чтобы эта конфигурация была одна для всех слоев приложения, или придется дублировать настройки разрешения интерфейсов в каждом слое?
– Доступен ли какой-нибудь простой механизм разрешения зависимостей, как тот, который я использовал в Ninject или необходимо будет везде, где нужно разрешить зависимость, создавать UnityContainer и делать Resolve через него? Конечно это не слишком сложно, просто после Ninject выглядит топорно.

Спасибо за помощь, мне просто не у кого спросить, кроме как у сообщества.
  • Вопрос задан
  • 4355 просмотров
Решения вопроса 1
@vmp32
– Возможно ли вынести конфигурацию DI в web.config, и чтобы эта конфигурация была одна для всех слоев приложения, или придется дублировать настройки разрешения интерфейсов в каждом слое?


Да, в секцию unity файла web.config
пример в конце данной статьи: smarly.net/forum/asp-net-article/thread2/ispolzova...
Видео с примером использования: www.youtube.com/watch?v=QcN2lh3GIpE&index=5&list=P...

– Доступен ли какой-нибудь простой механизм разрешения зависимостей, как тот, который я использовал в Ninject или необходимо будет везде, где нужно разрешить зависимость, создавать UnityContainer и делать Resolve через него? Конечно это не слишком сложно, просто после Ninject выглядит топорно.


Свойства, в которые требуется инъекция надо пометить атрибутом [Dependency], при разрешении зависимости свойство будет инициализировано.
Использование контейнера в MVC
видео с пошаговым примером: www.youtube.com/watch?v=rVLY2NnEXRo&index=3&list=P...

ЗЫ:
Быстрый старт по unity (уберет большинство возникающих вопросов):
habrahabr.ru/post/62830
habrahabr.ru/post/63280
habrahabr.ru/post/63568
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы