如果我在 ninject 中使用 ReqeustScope()
定义绑定(bind),然后调用Kernel.Get<T>
在请求之外的那种类型上,解析对象的范围是什么?
最佳答案
如果我们研究 StandardScopeCallbacks我们可以看到请求范围的回调是当前的 HTTP 上下文。 transient 对象的回调为空。如果您在请求之外解析服务,则当前 HTTP 上下文为空。因此,范围是隐含的 transient ,如以下测试所示。
[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));
}
关于.net - Ninject 中的 RequestScope() 和 Kernel.Get<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6273799/