C# 作用域服务在(非web)主机上下文中的含义
在将此问题报告为重复问题之前,涵盖了瞬态、作用域和单例的使用,但答案和讨论主要针对配置web主机的上下文中的含义,但我的问题与(非web)主机上下文中这些类型服务的含义相关,特别是关于作用域服务的混淆 让我们从下面的代码开始: 在Program.cs中C# 作用域服务在(非web)主机上下文中的含义,c#,asp.net-core,dependency-injection,C#,Asp.net Core,Dependency Injection,在将此问题报告为重复问题之前,涵盖了瞬态、作用域和单例的使用,但答案和讨论主要针对配置web主机的上下文中的含义,但我的问题与(非web)主机上下文中这些类型服务的含义相关,特别是关于作用域服务的混淆 让我们从下面的代码开始: 在Program.cs中 公共静态IHostBuilder CreateHostBuilder(字符串[]args)=> Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder=> { we
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
})
.ConfigureServices((主机上下文,服务)=>
{
services.AddHostedService();
});
我可以理解在非web主机上下文中瞬态和单例的含义
- 每次请求临时生存期服务时都会创建它们。(不要与“http请求”混淆,而是字面意思是“每次请求服务时”。)
- 单例生存期服务适用于应用程序域的生存期
的作用域是什么
Host.CreateDefaultBuilder(args)…配置服务((主机上下文,服务)=>
{
services.AddHostedService();
services.addScope();
});
另外,请参见以获取实际示例
我最接近的理解是“作用域内的每个请求(同样,不是http请求,而是服务请求)创建一次作用域生存期服务。它相当于当前作用域中的一个单例。”。。。这意味着,如果在DefaultBuilder
(非web主机)上配置服务时AddScoped
,当从同一作用域请求时,将生成一个新的、完全独立的服务实例?这个大概对吗
如果我离这里很远,我道歉。谢谢您的时间。是的,在web主机中,将为请求创建生存期作用域
在控制台应用程序、windows服务或任何类型的应用程序(包括web托管的应用程序)中,您可以在需要时创建生存期作用域
例如,您可以创建一个windows服务来按计划处理某些内容。每次运行计划作业时创建生存期范围可能是有意义的。现在,在该范围内解析的、注册为作用域的所有组件都将在逻辑上作用域到它。这将使您的实例在每次运行时保持独立,并且它们将与作用域一起处理
如果您有多个独立异步运行的不同类型的任务,这可能非常有用。这样,它们拥有的任何组件依赖项都将被正确地确定范围