当使用Ninject和ServiceStack时,如何指定对象的生命周期是每个请求,如有必要,调用任何IDisposable.Dispose方法?
根据文档,默认的方法是:
container.RegisterAutoWiredAs<MyType,IMyType>().ReusedWithin(ReuseScope.Request);
但是,我必须使用NinjectContainerAdapter
作为我的项目。通常我会安装Ninject.Web.Common
并写:
kernel.Bind<IMyType>().To<MyType>().InRequestScope()
我的实例将在请求结束时被处理掉。我将如何在ServiceStack中执行此操作,比如在自托管方案中?
答案 0 :(得分:3)
您必须为ServiceStack实施INinjectHttpApplicationPlugin
。在方法object GetRequestScope(IContext context);
中,您必须返回一个具有请求生命周期的对象(相当于HttpContext.Current
))
可能您可以将对象添加到HostContext
并将该对象作为范围返回。最好让对象实现INotifyWhenDisposed
并在请求结束时将其处置,以便在请求之后立即释放对象,而不是等待对象被垃圾回收..