Я искал ответ на тот же вопрос, но, похоже, сам нашел достойный ответ.И между прочим: я MVC, Ninject, DI n00b, так что не стесняйтесь стрелять в меня, если я далеко отсюда, но я думаю, что я понял это в значительной степени.
«PreApplicationStartMethod»атрибут уже существует в System.Web и может использоваться для запуска методов даже до Application_Start ().Это означает, что это очень хорошо для DI, так как вам, возможно, придется начинать инъекцию уже в Application_Start (), а с помощью PreApplicationStartMethod вы можете не допускать инъекции в Application_Start () и убедиться, что это самая первая вещь, которую нужно запустить, когдаВаше приложение запускается.
Проблема в том, что Microsoft позволяет помечать этим атрибутом только 1 метод, что, как они признают, является недостатком дизайна.Вот почему они создали класс WebActivator, чтобы обойти этот недостаток.
Одним из преимуществ, позволяющих пометить несколько методов как PreApplicationStartMethod, является то, что пакеты NuGet, требующие инициализации, можно вставлять в ваше приложение, не касаясьсуществующего кода, просто пометив какой-то метод инициализации с помощью версии WebActivator атрибута PreApplicationStartMethod.
Этот метод почти такой же, как просто сборка ядра в Application_Start (), но материал Ninject запускается раньше.
Переопределяя NinjectHttpApplication, вы получаете Ninject для выполнения множества общих заданий привязки, связанных с MVC, таких как привязка HttpContext и т. Д. С помощью метода WebActivavtor / Application_Start () вы должны сделать это самостоятельно, еслиЯ могу сказать.
Несколько хороших ссылок: