Я создаю приложение ASP.NET MVC 5 с использованием шаблонов проектирования репозитория и уровня сервиса. Я использовал единство, чтобы вводить свои услуги в мои контроллеры.Внедрение зависимостей ASP.NET MVC за пределами контроллера с Unity
Это хорошо работает, и до сих пор мне не приходилось учитывать создание экземпляров любых объектов, требующих ввода интерфейсов вне моих контроллеров. Однако мне нужно это при настройке запуска моего приложения для настройки некоторых пользователей в базе данных.
Для этого я хотел использовать мой UsersService
, который я создал. И мне пришло в голову, что, когда приложение будет расти, наверняка будут другие случаи, когда я захочу сделать то же самое, например, вызвать службу из другой службы.
Я вижу, что я могу создать экземпляр контейнера Unity и вызвать решимость на него, чтобы получить мой новый экземпляр службы:
IProductService productService = container.Resolve<IProductService>();
Однако это своего рода запахи мне, имея контейнер просочилась во всем мое приложение кажется как анти-образец. Так есть лучший способ сделать это?
Хорошо спасибо за подтверждение существования проблемы с локатором обслуживания. Я вижу, что если я получаю больше, чем около 3-х сервисов, которые вводят свое время для рефакторинга.Что касается всего графика зависимости, который вы упомянули, я полагаю, что это означает, что единство определяет, какие потребности нужно вводить, и какие зависимости этих зависимостей также нужно вводить и так далее. В этом случае, если я вне контроллера, как мне избежать такого: IService1 service1 = new Service1 (новый Service2 (новый Service3())), где service1 зависит от service2, который зависит от service3; –
@PhilipMccarthy - Я обновил свой ответ. – NightOwl888
Большое спасибо, очень полезно. –