Ninject中的RequestScope()和Kernel.Get <>

kay*_*one 5 .net dependency-injection ninject webrequest

如果我在ninject中定义了一个绑定ReqeustScope(),然后Kernel.Get<T>在请求之外调用该类型,那么解析对象的范围是什么?

mry*_*ren 10

如果我们研究StandardScopeCallbacks,我们可以看到请求范围的回调是当前的HTTP上下文.瞬态对象的回调为null.如果解析请求之外的服务,则当前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));
}
Run Code Online (Sandbox Code Playgroud)