Использование платформы Microsoft Unity 2.0 с веб-приложением - PullRequest
2 голосов
/ 23 февраля 2012

При использовании Unity 2.0 для внедрения зависимостей в веб-приложении создается впечатление, что пользовательским элементам управления, страницам и т. Д. Все должны будут делать явные вызовы для извлечения контейнера и «извлечения» зависимостей… поэтому используются аннотации, такие как [dependency] won не предлагать никакой ценности. Вероятно, это связано с тем, что местоположение контейнера (контекст приложения, кэш контекста http и т. Д.) Неизвестно в веб-конфигурации.

Поскольку Unity сам обеспечивает перехват методов, разве нет способа "сказать" единству, как правильно извлекать контейнер при создании собственного веб-приложения? Вместо того, чтобы создавать базовые классы для страницы и т. Д.

1 Ответ

1 голос
/ 23 февраля 2012

Проблема заключается в том, что страницы и элементы управления WebForms не настроены на конструирование путем внедрения зависимостей, поэтому Unity никогда не вызывается вообще, если класс не вызывает сам Unity.Я обнаружил, что лучший способ в этих случаях - вызывать структуру DI в конструкторе через локатор службы, а затем использовать аннотации для маркировки свойств зависимости.Как то так:

public MyPage()
{
    // Injector is a wrapper class so you can change the underlying DI framework
    // later if necessary.
    Injector.Inject(this); 
}

[Dependency]
public SomeService MyService {get;set;}
...