Как вводить зависимости в global.asax.cs
Как я вставляю зависимости в файл global.asax.cs, т.е. класс MvcApplication?
Прежде чем использовать шаблон "Локатор службы" (anti-) для инъекции зависимостей, я стараюсь следовать рекомендациям по лучшей практике в своем последнем приложении MVC с помощью контейнера IOC (в частности, Unity.Mvc3, поскольку он поставляется с реализацией IDependencyResolver из коробки) и инъекции конструктора.
Все кажется довольно прямым до сих пор, за исключением нескольких коряг, одна из которых находится в global.asax.cs(другая - для пользовательских атрибутов, но там есть вопрос о том, как это сделать).
Обработчики событий HttpApplication в классе MvcApplication, такие как:
Application_Start()
Application_EndRequest(object sender, EventArgs e)
Application_AcquireRequestState(object sender, EventArgs e)
могут потребоваться внешние зависимости, например. зависимость от ILogService. Итак, как я их вставляю, не прибегая к шаблону локализации службы (anti-), например,
private static ILogService LogService
{
get
{
return DependencyResolver.Current.GetService<ILogService>();
}
}
Любая помощь/совет получили высокую оценку!
Ответы
Ответ 1
Класс в вашем global.asax.cs - это ваш Root of Composition, поэтому вы не можете (и не должны) вводить что-либо в это снаружи.
Однако существует только один экземпляр класса MvcApplication, поэтому, если вам нужен сервис в одном из его методов, вы можете просто объявить его как поле участника - например:
public class MvcApplication : System.Web.HttpApplication
{
private readonly ILogService log;
public MvcApplication()
{
this.log = new MyLogService();
}
protected void Application_Start()
{
// ...
this.log.Log("Application started");
}
}