Нужно ли регистрировать 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 и один из моих приложений.