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# 我应该使用单例服务还是作用域服务在ASP.NET核心中进行api调用?_C#_Asp.net Core_.net Core_Dependency Injection - Fatal编程技术网

C# 我应该使用单例服务还是作用域服务在ASP.NET核心中进行api调用?

C# 我应该使用单例服务还是作用域服务在ASP.NET核心中进行api调用?,c#,asp.net-core,.net-core,dependency-injection,C#,Asp.net Core,.net Core,Dependency Injection,我有一个进行API调用的类。我想将其作为依赖项传递,我想知道是否最好使用单例或范围: services.AddScoped<IHttpCallService, HttpCallService>(); or services.AddSingleton<IHttpCallService, HttpCallService>(); services.addScope(); 或 services.AddSingleton(); 我知道Singleton和Scoped在实例创

我有一个进行API调用的类。我想将其作为依赖项传递,我想知道是否最好使用
单例
范围

services.AddScoped<IHttpCallService, HttpCallService>();
 or 
services.AddSingleton<IHttpCallService, HttpCallService>();
services.addScope();
或
services.AddSingleton();
我知道Singleton和Scoped在实例创建方面存在差异, 但我想知道哪一个更有效,更适合这种情况?
另外,如果我使用
Singleton
,这是否意味着一切都将同步工作?

建议的模式是让您的
HttpCallService
依赖于
HttpClient
实例,然后将其注册为

services.AddHttpClient();

这将把
HttpCallService
注册为临时服务。

建议的模式是让您的
HttpCallService
依赖于
HttpClient
实例,然后将其注册为

services.AddHttpClient();

这将把
HttpCallService
注册为临时服务。

最好的建议是在处理api调用时,在此场景中使用
singleton
。下面的文章解释了您不使用
HttpClient
作为
singleton

services.AddSingleton<IHttpCallService, HttpCallService>();
services.AddSingleton();
阅读这篇文章,了解更多关于这方面的深入知识

最好的建议是在处理api调用时在此场景中使用
单例。下面的文章解释了您不使用
HttpClient
作为
singleton

services.AddSingleton<IHttpCallService, HttpCallService>();
services.AddSingleton();
阅读这篇文章,了解更多关于这方面的深入知识

这可能会帮助您更好地理解:。您在谈论什么样的应用程序?如果您使用的是HttpClient。。。最好的方法是使用单例并使用async/await创建CAL。HttpClient旨在以这种方式更好地工作。@AlexeyRumyantsev这是一个asp.net核心web Api应用程序。关于“这是否意味着所有内容都将同步工作?”:在C中,对于使用相同对象或方法的请求,没有任何类型的队列。如果多个线程都使用同一个singleton对象,那么每个线程都有自己的堆栈,并且基本上是独立的。唯一真正共享的是singleton对象上的任何字段。这可能会帮助您更好地理解:。您在谈论什么类型的应用程序?如果您使用的是HttpClient。。。最好的方法是使用单例并使用async/await创建CAL。HttpClient旨在以这种方式更好地工作。@AlexeyRumyantsev这是一个asp.net核心web Api应用程序。关于“这是否意味着所有内容都将同步工作?”:在C中,对于使用相同对象或方法的请求,没有任何类型的队列。如果多个线程都使用同一个singleton对象,那么每个线程都有自己的堆栈,并且基本上是独立的。唯一真正共享的是singleton对象上的任何字段。