在使用Nancy.Bootstrappers.Ninject时,如何让Nancy处理我的InRequestScope()对象?

时间:2013-05-29 20:22:22

标签: c# asp.net ninject nancy

我与Nancy和Nancy.Bootstrappers.Ninject有简单的应用程序。我们必须使用Ninject,因为Web应用程序是已经使用Ninject的大量应用程序的一部分。

我尝试了不同的设置:

  • 只需NancyNancy.Bootstrappers.Ninject
  • 使用Ninject.Web.Common,使用网络激活器注册两个HttpModules
  • 通过覆盖GetApplicationContainer()并返回创建的内核Ninject.Web.Common

绑定就像

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

并位于我的自定义Nancy bootstrapper中。当然,IRepository会延伸IDisposable

但是,如果没有这些设置,我Dispose()的{​​{1}}方法就会被调用。

在请求完成后设置调用Repository的每请求绑定的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

知道了。 https://github.com/NancyFx/Nancy.Bootstrappers.Ninject上提供的信息似乎还不够。我在https://github.com/NancyFx/Nancy/wiki/Container-Support上找到了以下内容:

  

ConfigureRequestContainer()中的容器参数是一个子容器,它位于请求的末尾。

  

这里的容器是一个子容器。即这里的单身人士都在申请范围内。

显然,InSingletonScope()是必需的,因此每请求内核会处理该对象。使用该解决方案,甚至不需要所有Ninject.Web内容!