如果我使用
ReqeustScope()
在 ninject 中定义一个绑定,然后在请求之外调用 Kernel.Get<T>
获取该类型的对象,那么解析对象的范围是什么?ReqeustScope()
在 ninject 中定义一个绑定,然后在请求之外调用 Kernel.Get<T>
获取该类型的对象,那么解析对象的范围是什么?如果我们研究一下StandardScopeCallbacks,我们可以看到请求范围的回调是当前的HTTP上下文。临时对象的回调为null。如果你在请求之外解析一个服务,当前的HTTP上下文将为null。因此,如下测试所示,作用域是隐式的瞬态。
[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));
}