2013-05-29 2 views
1

У меня есть простое приложение с Nancy и Nancy.Bootstrappers.Ninject. Мы должны использовать Ninject, потому что веб-приложение является частью более широкого набора приложений, которые уже используют Ninject.Как мне заставить Нэнси распоряжаться объектами InRequestScope() 'при использовании Nancy.Bootstrappers.Ninject?

Я пробовал различные настройки:

  • Просто Nancy и Nancy.Bootstrappers.Ninject
  • С Ninject.Web.Common, который регистрирует два HttpModules с помощью веб-активатор
  • Переопределелив GetApplicationContainer() и возвращает ядро, которое создается Ninject.Web.Common

Связывание так же просто, как

protected override void ConfigureRequestContainer(IKernel kernel, NancyContext context) 
{ 
    kernel.Bind<IRepository>().To<Repository>().InRequestScope(); 
} 

и находится в моем обычном загрузочном устройстве Нэнси. IRepository распространяется IDisposable, конечно.

Но ни одна из этих установок не была вызвана методом Dispose() моего вызываемого Repository.

Каков правильный способ установки привязок по запросу, вызывающих Dispose() после того, как запрос был завершен?

+3

@RobSiklos Цветы не доступны как пакет NuGet, это не вариант ... – theDmi

ответ

2

Got it. Информация, представленная на https://github.com/NancyFx/Nancy.Bootstrappers.Ninject, кажется, не достаточна. Я нашел следующее на https://github.com/NancyFx/Nancy/wiki/Container-Support:

Параметр контейнера в ConfigureRequestContainer() является дочерним контейнером, который расположен в конце запроса.

и

Контейнер здесь является дочерним контейнером. То есть синглтоны здесь находятся в области запроса.

По-видимому, требуется InSingletonScope(), так что ядро ​​для каждого запроса располагает объектом. С этим решением все материалы Ninject.Web даже не нужны!

Смежные вопросы