我为什么要将IHttpContextAccessor注入Singleton

时间:2017-09-20 19:09:44

标签: c# asp.net asp.net-core httpcontext

在我见过IHttpContextAccessor注射的所有例子中,它被设置为单身人士。

示例:

How to add IHttpContextAccessor in the Startup class in the DI in ASP.NET Core 1.0? Injecting IHttpContextAccessor into ApplicationDbContext ASP.NET Core 1.0 .NET Core IHttpContextAccessor issue

我发现它有点奇怪,因为HttpContext看起来像是映射到请求的东西。在这种情况下,不会AddScoped更合适吗?

Singleton真的是推荐的方式吗?我没有看到什么吗?

1 个答案:

答案 0 :(得分:7)

  

Singleton真的是推荐的方式吗?

根据与GitHub上提出的问题相关的评论

https://github.com/aspnet/Hosting/issues/793#issuecomment-224828588

  
    

在该示例中,您将其注册为单身人士。它不应该是一个范围的实例吗?

  
     

没关系,因为后备存储是异步本地的。

后来得到了回复

https://github.com/aspnet/Hosting/issues/793#issuecomment-224924030

  

实际上,如果您在.NET Core上将其注册为Transient,那么它无法正常工作,因为.NET Core的实现使用AsyncLocal,它依赖于实例变量来跟踪TLS存储槽。因此必须在.NET Core上注册为单例。