Разрешить экземпляры в статических функциях с помощью 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)

Другие вопросы по тегам