Подтвердить что ты не робот

Как вводить зависимости в 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>();
    }
}

Любая помощь/совет получили высокую оценку!

4b9b3361

Ответ 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");
    }
}