Нужно ли регистрировать Ninject.OnePerRequestModule с Ninject.Сеть.В MVC 3.0?
Я использую Ninject для DI и Ninject.Расширение MVC3 в приложении MVC4, в частности версия 3.0.0.6.
чтение документация на wiki Ninject, похоже, что время жизни объектов, созданных с помощью InRequestScope
фактически контролируются ASP.NET и чтобы правильно очистить, нужно зарегистрировать OnePerRequest
модуль httpmodule.
однако похоже, что этот документ устарел как type="Ninject.OnePerRequestModule"/>
не может быть найден.
С другой стороны я читайте некоторые bits недавно это, казалось, предполагало, что NinjectHttpApplication
уже имеет дело с OnePerRequest
.
мой вопрос в том, является ли Ninject.Сеть.MVC 3.0 уже занимается этой проблемой, или если мне все еще нужно вручную добавить HttpModule в мой "веб".config'.
я добавил ниже к моей конфигурации, и все, кажется, работает, хотя я понятия не имею, как проверить, когда объекты уничтожены:
<system.web>
<httpModules>
<add name="OnePerRequestModule" type="Ninject.Web.Common.OnePerRequestHttpModule"/>
</httpModules>
...
мне нужно вручную добавить OnePerRequest
HttpModule или делает Ninject.Сеть.MVC справится с этим для меня?
1 ответов
резюме Exec: нет, вам не нужно ничего делать в web.config
.
вы можете вручную проверить здравомыслие:
- связывание чего-то
IDisposable
.InRequestScope()
- добавление его в ctor контроллера
- присоединить отладчик, поставить точку останова в
void Dispose()
- ручной запуск a
HttpRequest
если вы нажмете Dispose
, это ВОЗ Ninject, который застрелил медведя (и у вас будет стек вызовов, чтобы доказать он.)
какие провода это он? The Ninject.Web.Common
пакет NuGet добавляет:
public static class NinjectWebCommon
{
public static void Start()
{
...
DynamicModuleUtility.RegisterModule( typeof( OnePerRequestHttpModule ) );
DynamicModuleUtility
С Microsoft.Web.Infrastructure
(и звонок в Start
способ определяется:
[assembly: WebActivator.PreApplicationStartMethod( typeof( App_Start.NinjectWebCommon ), "Start" )]
(что происходит от WebActivator
пакет NuGet)
говоря педантично, интернет -- это говоритсказал:
чтобы получить более детерминированное поведение, вы можете сделать следующее:
...
использовать Ninject.Сеть.Общие расширения, которые регистрируют OnePerRequestModule для вас.
...
вы can зарегистрироваться
(Курсив мой). Я сделаю это более явным...
кстати в начале упражнения, отвечая на этот вопрос, у меня не было никаких специальных знаний, только источник Ninject
Ninject.Web.Common
и один из моих приложений.