Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 作用域服务在(非web)主机上下文中的含义_C#_Asp.net Core_Dependency Injection - Fatal编程技术网

C# 作用域服务在(非web)主机上下文中的含义

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

在将此问题报告为重复问题之前,涵盖了瞬态、作用域和单例的使用,但答案和讨论主要针对配置web主机的上下文中的含义,但我的问题与(非web)主机上下文中这些类型服务的含义相关,特别是关于作用域服务的混淆

让我们从下面的代码开始:

在Program.cs中

公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
})
.ConfigureServices((主机上下文,服务)=>
{
services.AddHostedService();
});
我可以理解在非web主机上下文中瞬态和单例的含义

  • 每次请求临时生存期服务时都会创建它们。(不要与“http请求”混淆,而是字面意思是“每次请求服务时”。)
  • 单例生存期服务适用于应用程序域的生存期
但是,无论我读到哪里,http请求上下文中的作用域服务都意味着为每个(http?)请求创建一个新实例。文档和其他讨论通常针对与web主机打交道时的行为,因此我需要澄清

那么,在默认(非web)HostBuilder上配置IServiceCollection的上下文中,
的作用域是什么

Host.CreateDefaultBuilder(args)…配置服务((主机上下文,服务)=>
{
services.AddHostedService();
services.addScope();
});
另外,请参见以获取实际示例

我最接近的理解是“作用域内的每个请求(同样,不是http请求,而是服务请求)创建一次作用域生存期服务。它相当于当前作用域中的一个单例。”。。。这意味着,如果在
DefaultBuilder
(非web主机)上配置服务时
AddScoped
,当从同一作用域请求时,将生成一个新的、完全独立的服务实例?这个大概对吗


如果我离这里很远,我道歉。谢谢您的时间。

是的,在web主机中,将为请求创建生存期作用域

在控制台应用程序、windows服务或任何类型的应用程序(包括web托管的应用程序)中,您可以在需要时创建生存期作用域

例如,您可以创建一个windows服务来按计划处理某些内容。每次运行计划作业时创建生存期范围可能是有意义的。现在,在该范围内解析的、注册为作用域的所有组件都将在逻辑上作用域到它。这将使您的实例在每次运行时保持独立,并且它们将与作用域一起处理

如果您有多个独立异步运行的不同类型的任务,这可能非常有用。这样,它们拥有的任何组件依赖项都将被正确地确定范围