Как правильно настроить Ninject для приложения MVC3? - PullRequest
6 голосов
/ 21 февраля 2011

Я прочитал несколько статей, касающихся настройки Ninject для проектов MVC3.

Некоторые говорят, что ваш Global.asax.cs должен наследоваться от NinjectHttpApplication , другие регистрируют модули при создании StandardKernel через Application_Start ().

Я лично использовал NuGet, и все пошло по другому пути: создать класс AppStart_NinjectMVC3 и запустить его с использованием

[assembly: WebActivator.PreApplicationStartMethod(typeof(MyApp.AppStart_NinjectMVC3), "Start")]

Есть ли у каждого преимущества / недостатки?

Ответы [ 2 ]

6 голосов
/ 23 февраля 2011

Ян и я были очень заняты этой темой в течение последних нескольких дней.Ninject.Web.Mvc и Ninject.MVC3 были объединены.По-прежнему есть два способа либо извлечь из NinjectHttpApplication, либо установить пакет nuget.Но теперь они основаны на одном и том же коде, поэтому они имеют одинаковые функции.Смотрите мой блог о более подробной информации:

http://www.planetgeek.ch/2011/02/22/ninject-mvc3-and-ninject-web-mvc3-merged-to-one-package/

2 голосов
/ 22 февраля 2011

Я искал ответ на тот же вопрос, но, похоже, сам нашел достойный ответ.И между прочим: я 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 () вы должны сделать это самостоятельно, еслиЯ могу сказать.

Несколько хороших ссылок:

...