Разрешить экземпляры в статических функциях с помощью LightInject
Я использую LightInject в проекте ASP MVC. Код инициализации более или менее такой же, как на: http://www.lightinject.net/
Мой вопрос заключается в том, как разрешить экземпляры в статических функциях, например, в помощнике HTML:
public static string MyHtmlExtension(this HtmlHelper h)
{
var myService = new MyService(); // <- get this from container instead of creating new object
return myService.DoSomething(h);
}
Могу ли я сделать ServiceContainer
в MvcApplication
класс статический или это плохая практика?
1 ответ
Вы можете сделать контейнер одноэлементным (статическим), поскольку в большинстве случаев в каждом домене приложения будет только один экземпляр контейнера. При этом я бы не рекомендовал обращаться к контейнеру из метода расширения. То, что вы в основном делаете здесь, это шаблон поиска сервисов, который считается анти-шаблоном. Попробуйте организовать свой код таким образом, чтобы ссылаться только на контейнер в корне композиции (запуск приложения). Так что в этом случае вам следует либо создать метод расширения без контейнера, либо добавить HtmlHelper в любой класс, который в этом нуждается.
С уважением Бернхард Рихтер (Автор LightInject)