在我见过的所有例子中IHttpContextAccessor
注入时,它被设置为单例。
例子:
如何在ASP.NET Core 1.0中的DI中的Startup类中添加IHttpContextAccessor? https://stackoverflow.com/questions/38184583/how-to-add-ihttpcontextaccessor-in-the-startup-class-in-the-di-in-asp-net-core-1
将 IHttpContextAccessor 注入 ApplicationDbContext ASP.NET Core 1.0 https://stackoverflow.com/questions/39131925/injecting-ihttpcontextaccessor-into-applicationdbcontext-asp-net-core-1-0
.NET Core IHttpContextAccessor 问题 https://stackoverflow.com/questions/40303982/net-core-ihttpcontextaccessor-issue
我觉得这有点奇怪,因为HttpContext
看起来确实像是映射到请求的东西。不会AddScoped
在这种情况下更合适吗?
Singleton 真的是推荐的方式吗?难道我没看到什么吗?
Singleton 真的是推荐的方式吗?
Yes
根据与 GitHub 上提出的问题相关的评论
https://github.com/aspnet/Hosting/issues/793#issuecomment-224828588 https://github.com/aspnet/Hosting/issues/793#issuecomment-224828588
在该示例中,您将其注册为单例。它不应该是一个作用域实例吗?
作为单例很好,因为后备存储是异步本地的。
后来得到了回复
https://github.com/aspnet/Hosting/issues/793#issuecomment-224924030 https://github.com/aspnet/Hosting/issues/793#issuecomment-224924030
实际上,如果您在 .NET Core 上将其注册为 Transient,那么它就无法正常工作,因为 .NET Core 的实现使用 AsyncLocal,它依赖于实例变量来跟踪线程本地存储槽。因此它必须在 .NET Core 上注册为单例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)