ServiceStack和NinjectContainerAdapter的每个请求生命周期一次性

时间:2013-01-30 05:52:43

标签: ninject servicestack

当使用Ninject和ServiceStack时,如何指定对象的生命周期是每个请求,如有必要,调用任何IDisposable.Dispose方法?

根据文档,默认的方法是:

container.RegisterAutoWiredAs<MyType,IMyType>().ReusedWithin(ReuseScope.Request); 

但是,我必须使用NinjectContainerAdapter作为我的项目。通常我会安装Ninject.Web.Common并写:

kernel.Bind<IMyType>().To<MyType>().InRequestScope()

我的实例将在请求结束时被处理掉。我将如何在ServiceStack中执行此操作,比如在自托管方案中?

1 个答案:

答案 0 :(得分:3)

您必须为ServiceStack实施INinjectHttpApplicationPlugin。在方法object GetRequestScope(IContext context);中,您必须返回一个具有请求生命周期的对象(相当于HttpContext.Current))

可能您可以将对象添加到HostContext并将该对象作为范围返回。最好让对象实现INotifyWhenDisposed并在请求结束时将其处置,以便在请求之后立即释放对象,而不是等待对象被垃圾回收..