Одноразовый срок службы по запросу с 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 ответ:
Вам придется реализовать
INinjectHttpApplicationPlugin
для ServiceStack. В методеobject GetRequestScope(IContext context);
необходимо вернуть некоторый объект, который имеет время жизни запроса (эквивалентHttpContext.Current
))Вероятно, вы можете добавить объект в
HostContext
и вернуть его в качестве области видимости. Лучше всего сделать так, чтобы этот объект реализовалINotifyWhenDisposed
и разместил его в конце запроса, чтобы объекты освобождались сразу после запроса, а не ждали, пока объект будет собран..