我为什么要将IHttpContextAccessor注入Singleton

Art*_*zzo 11 c# asp.net httpcontext asp.net-core

在我看过IHttpContextAccessor注射的所有例子中,它被设置为Singleton.

例子:

如何在ASP.NET Core 1.0的DI中的Startup类中添加IHttpContextAccessor? 将IHttpContextAccessor注入ApplicationDbContext ASP.NET Core 1.0 .NET Core IHttpContextAccessor问题

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

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

Nko*_*osi 10

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上注册为单例.

  • “稍后回复”不再有效 https://github.com/dotnet/aspnetcore/commit/622d112372ed11075af160b1fb5a11a7637ff516#commitcomment-69899284 (3认同)
  • 我根本不明白这个说法:“.NET Core 正在使用 AsyncLocal,它依赖于实例变量来跟踪 TLS 存储槽”。但问题得到了回答!谢谢。 (2认同)