#.net #dependency-injection #ninject #webrequest
#.net #внедрение зависимости #ninject #веб-запрос
Вопрос:
Если я определю привязку в ninject с помощью ReqeustScope()
, а затем вызову Kernel.Get<T>
этот тип вне запроса, какой будет область разрешенного объекта?
Комментарии:
1. Я хотел бы знать, как сделать аналогичную вещь. У меня есть разрешения, которые выполняются во время запроса, и некоторые фабрики сохраняются после запроса. Использование NamedScope и ContextPreservation не помогло мне решить проблему в контексте одного логического запроса.
Ответ №1:
Если мы изучим StandardScopeCallbacks, мы увидим, что обратный вызов для области запроса является текущим контекстом HTTP. Обратный вызов для переходного объекта равен нулю. Если вы разрешаете службу вне запроса, текущий контекст HTTP равен нулю. Таким образом, область видимости является неявным переходным процессом, как видно из следующего теста.
[Test]
public void ServiceInRequestScopeIsImplicitTransientWhenHttpContextIsNull()
{
var kernel = new StandardKernel();
kernel.Bind<ServiceInRequestScope>().ToSelf().InRequestScope();
Assert.That(HttpContext.Current, Is.Null);
var service0 = kernel.Get<ServiceInRequestScope>();
var service1 = kernel.Get<ServiceInRequestScope>();
Assert.That(service0, Is.Not.SameAs(service1));
}