Веб-формы и внедрение зависимостей

Я нахожусь в процессе внедрения инфраструктуры внедрения зависимостей в существующее приложение WebForms (с использованием Castle Windsor).

У меня довольно большой опыт работы с DI, и я предпочитаю внедрение конструктора вместо внедрения через сеттер. Если вы знакомы с веб-формами, вы знаете, что платформа ASP.Net обрабатывает создание страниц и объектов управления, что делает невозможным истинное внедрение конструктора.

Мое текущее решение - зарегистрировать контейнер в событии Application_Start файла Global.asax, а также сохранить контейнер как общедоступную статическую переменную в Global. Затем я просто разрешаю каждую службу, которая мне нужна, прямо на странице или в элементе управления, когда они мне нужны. Итак, в верхней части каждой страницы я получаю такой код:

private readonly IMyService _exposureManager = Global.IoC.Resolve<IMyService>();
private readonly IMyOtherService _tenCustomersExposureManager = Global.IoC.Resolve<IMyOtherService>();

Очевидно, мне не нравится, когда все эти ссылки на контейнер разбросаны по моему приложению или зависимости моей страницы / элемента управления не являются явными, но Я не мог найти лучшего способа.

Есть ли более элегантное решение для использования DI с веб-формами?

19
задан Phil Sandler 20 January 2012 в 20:24
поделиться