一切都是单例——请求不会创建新的范围(ASP.NET Core 2.x inside .NET Framework)
Everything is a singleton--requests aren't creating new scopes (ASP.NET Core 2.x inside .NET Framework)
我们正在将广泛的 Web 表单应用程序迁移到 .NET 5+/.NET Core 世界。我们已将大部分后端库代码移至 .NET Standard 2.0。
作为逐步转移功能的临时步骤,我们设置了一个在 .NET Framework webforms 应用程序中运行的 ASP.NET Core 2.2(在 .NET Standard 2.0 上运行的最后一个版本)项目。除了我们遇到的一个致命缺陷外,这工作得很好:所有东西都是相同的作用域,因此作用域对象被视为单例。除其他问题外,这意味着应用程序会锁定它看到的第一个登录用户。不过,瞬态工作正常。
我正在使用 this library 在应用程序的 ASP.NET 核心部分中正确路由——如果没有它,一切都会返回 404。但我不确定库是否是罪魁祸首或其他一些网络表单怪癖。
我应该在 ASP.NET Core 2.2 管道的哪个位置查看每个 HTTP 请求应该创建自己的 IServiceProvider 范围以修复此问题或手动执行此操作?
我要找的区域原来是 RequestServicesContainerMiddleware
,它为每个请求生成一个新的范围。检查是否 IServiceProvidersFeature
is already set. The library I'm using defines this up front.
现在的solution/workaround是我在RequestServicesContainerMiddleware
的简化版本中添加了总是创建一个新的服务范围。
(对如何修改DI系统帮助很大。)
我们正在将广泛的 Web 表单应用程序迁移到 .NET 5+/.NET Core 世界。我们已将大部分后端库代码移至 .NET Standard 2.0。
作为逐步转移功能的临时步骤,我们设置了一个在 .NET Framework webforms 应用程序中运行的 ASP.NET Core 2.2(在 .NET Standard 2.0 上运行的最后一个版本)项目。除了我们遇到的一个致命缺陷外,这工作得很好:所有东西都是相同的作用域,因此作用域对象被视为单例。除其他问题外,这意味着应用程序会锁定它看到的第一个登录用户。不过,瞬态工作正常。
我正在使用 this library 在应用程序的 ASP.NET 核心部分中正确路由——如果没有它,一切都会返回 404。但我不确定库是否是罪魁祸首或其他一些网络表单怪癖。
我应该在 ASP.NET Core 2.2 管道的哪个位置查看每个 HTTP 请求应该创建自己的 IServiceProvider 范围以修复此问题或手动执行此操作?
我要找的区域原来是 RequestServicesContainerMiddleware
,它为每个请求生成一个新的范围。检查是否 IServiceProvidersFeature
is already set. The library I'm using defines this up front.
现在的solution/workaround是我在RequestServicesContainerMiddleware
的简化版本中添加了总是创建一个新的服务范围。
(