RequestScope()和Kernel.Get<>在Ninject

时间:2011-06-08 03:11:25

标签: .net dependency-injection ninject webrequest

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

1 个答案:

答案 0 :(得分: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));
}