RequestScope () и Kernel.Get <> в Ninject - PullRequest
5 голосов
/ 08 июня 2011

Если я определю привязку в ninject с помощью ReqeustScope(), а затем вызову Kernel.Get<T> для этого типа вне запроса, какой будет область действия разрешенного объекта?

1 Ответ

10 голосов
/ 08 июня 2011

Если мы изучим 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));
}
...