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