我与Nancy和Nancy.Bootstrappers.Ninject有简单的应用程序。我们必须使用Ninject,因为Web应用程序是已经使用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();
}
并位于我的自定义Nancy bootstrapper中。当然,IRepository
会延伸IDisposable
。
但是,如果没有这些设置,我Dispose()
的{{1}}方法就会被调用。
在请求完成后设置调用Repository
的每请求绑定的正确方法是什么?
答案 0 :(得分:2)
知道了。 https://github.com/NancyFx/Nancy.Bootstrappers.Ninject上提供的信息似乎还不够。我在https://github.com/NancyFx/Nancy/wiki/Container-Support上找到了以下内容:
ConfigureRequestContainer()中的容器参数是一个子容器,它位于请求的末尾。
和
这里的容器是一个子容器。即这里的单身人士都在申请范围内。
显然,InSingletonScope()
是必需的,因此每请求内核会处理该对象。使用该解决方案,甚至不需要所有Ninject.Web内容!