Нужно ли регистрировать 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)


говоря педантично, интернет -- это говоритсказал:

чтобы получить более детерминированное поведение, вы можете сделать следующее:

  1. ...

  2. использовать Ninject.Сеть.Общие расширения, которые регистрируют OnePerRequestModule для вас.

...

вы can зарегистрироваться

(Курсив мой). Я сделаю это более явным...


кстати в начале упражнения, отвечая на этот вопрос, у меня не было никаких специальных знаний, только источник Ninject Ninject.Web.Common и один из моих приложений.