Ninject中的RequestScope()和Kernel.Get<>是什么意思?

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

我想知道如何做类似的事情。我有在请求期间制定的决议和一些工厂会在请求之后持续存在。使用NamedScope和ContextPreservation无法帮助我在一个逻辑请求的上下文中解决问题。 - Igor Zevaka
1个回答

10

如果我们研究一下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));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接