.net - Ninject 中的 RequestScope() 和 Kernel.Get<>

标签 .net dependency-injection ninject webrequest

如果我在 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/

相关文章:

asp.net-mvc-3 - 如何将 HttpContext 传递给 MVC3 应用程序中的依赖项初始化

inversion-of-control - Ninject 和 Log4Net

.net - 将未使用的默认程序集留在引用文件夹中不好?

c# - 我将 IDENTITY_INSERT 设置为 ON 但我收到一个 SqlException 说它已关闭

c# - Visual Studio 设计重叠面板

javascript - 在没有循环依赖的情况下重用服务

c# - 如何根据传递给 ASP.NET MVC 中的 Controller /操作的属性值有条件地绑定(bind)到 ninject?

c# - 比较同一列表中的多个项目

c# - 实现依赖注入(inject)静态方法

php - laravel 单例模式如何反射(reflect)后续调用的变化?