Разрешение зависимостей в Global.asax, если контейнер IoC инициализируется через WebActivator - PullRequest
0 голосов
/ 01 февраля 2012

В приложении ASP.NET MVC3 я инициализирую контейнер Ninject IoC через

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

Класс NinjectMVC3 отвечает за инициализацию моего контейнера IoC Kernel.

После того, как это вызвано, все контроллеры, которые объявляют разрешаемые зависимости через переменные конструктора, разрешают их просто отлично.

Но мне нужно использовать разрешенную зависимость в методе Global.asax Application_Start, чтобы передать ее в мои собственные глобальные фильтры? Как я могу разрешить зависимости в Application_Start в моем сценарии?

Ответы [ 2 ]

5 голосов
/ 01 февраля 2012

Вы можете использовать DependencyResolver.Current.GetService<T>()

2 голосов
/ 01 февраля 2012

В этом случае вам следует выбрать другой способ.Вставьте зависимости непосредственно в ваши фильтры, вместо того, чтобы сначала назначать их глобальному asax.Таким образом, вы решаете две проблемы одновременно:

  1. Глобальному asax не нужно знать о тех зависимостях, в которых он сам не нуждается.Вам следует избегать зависимостей от объектов, которые просто существуют для передачи их другим компонентам всякий раз, когда вы можете напрямую назначить их этому объекту.
  2. Вам не нужно использовать внедрение свойств или расположение службы, чтобы получить ихв глобальный asax

В документации расширений Ninject.MVC3 показано, как можно создавать фильтры с помощью Ninject, чтобы можно было выполнять инжекцию для них конструкторов:

https://github.com/ninject/ninject.web.mvc/wiki/Dependency-injection-for-filters

...