Как стать автором
Обновить

Комментарии 13

Список литературы к заметке составить забыли. А туда стоило бы включить хотя бы ту же Dependency Injection in .NET, где вся теория неплохо расписана.
Не холивара ради. А почему Unity? Почему не Autofac например у которого есть интеграция с MVC из коробки и который отлично может тебе сказать что тип зарегистрирован или нет.
Так сложилось, что какое-то время я много работал с patterns & practices: Prism, где, по умолчанию, используется UnityContainer, или MEF. Так как у всех популярных контейнеров в настоящий момент примерно равные возможности, то я решил работать с тем, что более знакомо.
Ну мой совет что в этом конкретном сетапе лучше использовать Autofac. Количество кода уменьшится а качество увеличится. Кстати я тоже работал с Prism как раз используя Autofac — получалось в разы приятнее чем с Uniti. Кстати посмотрел сейчас — Autofac отлично интегрируется и с WebAPI и с SIgnalR. Плюс имеет еще класные фишки типа ленивого резолва и автоматического dispose всего что создается вместе с реквестом.
Да, Autofac выглядит очень привлекательно в связке с ASP.NET. Нужно будет попробовать его в ближайшем времени. Unity, кстати, поддерживает ленивую инициализацию через класс InjectionFactory, а также ленивый resolve через Resolve<Func<T>>().
Ну Resolve<Func>() это резолв фабрики (не спортивно и немного криво), Autofac умеет резолвить Lazy что намного более наглядно и автоматом решает проблемы с ReadOnly и двойным резолвом. В принципе Unity умеет так или иначе практически все что умеет Autofac. Эта зараза (Autofac) подкупает тем что он очень explicit (все делается очень явно, никакой магии) и количеством фишек которые идут в комплекте.
Ага, количество магии в Unity явно завышено. Особенно, если использовать АОП с Interception. С другой стороны, в том же MEF магии явно больше: понавешал на всё странных атрибутов, и оно как-то само собралось и заработало.
Unity гораздо роднее для ASP.NET MVC, т.к его делают ребята, можно сказать, из «соседнего отдела».
Его же MS и продвигает, поэтому и привыкли все.
Ну не совсем из соседнего. У ребят из patterns & practices свое видение мира и весьма кхм… своеобразное.

А тот же Nicholas Blumhardt, автор контейнера Autofac, был проджект менеджером команды которая делала MEF.
Поставьте рядом с термином «Отражение» оригинальное название, мне несколько секунд пришлось вспоминать что за мирроринг такой.
Чего только люди не придумают чтобы Autofac не использовать :)
Ok. Еще и название не нравится ;)
Вызов Dispose для зависимостей является плохой практикой при использовании DI. Как и включение IDisposable в интерфейс класса. Временем жизни и уничтожением объектов должен управлять контейнер. Он сам вызовет Dispose у объекта, когда это необходимо.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории