Одноразовый срок службы по запросу с ServiceStack и NinjectContainerAdapter


При использовании Ninject с ServiceStack, как бы я указал, что время жизни объекта должно быть per-request, вызывая любой IDisposable.Утилизировать метод, если это необходимо?

Согласно документам, по умолчанию это делается следующим образом:

container.RegisterAutoWiredAs<MyType,IMyType>().ReusedWithin(ReuseScope.Request); 
Тем не менее, я должен использовать NinjectContainerAdapter для моего проекта. Обычно я устанавливаю Ninject.Web.Common и пишу:

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

И мой экземпляр будет удален в конце запроса. Как бы я мог сделать это в ServiceStack, скажем, в самостоятельном хостинге сценарий?

1 3

1 ответ:

Вам придется реализовать INinjectHttpApplicationPlugin для ServiceStack. В методе object GetRequestScope(IContext context); необходимо вернуть некоторый объект, который имеет время жизни запроса (эквивалент HttpContext.Current))

Вероятно, вы можете добавить объект в HostContext и вернуть его в качестве области видимости. Лучше всего сделать так, чтобы этот объект реализовал INotifyWhenDisposed и разместил его в конце запроса, чтобы объекты освобождались сразу после запроса, а не ждали, пока объект будет собран..