【发布时间】:2018-05-04 16:38:04
【问题描述】:
我正在创建一个新的 Asp.Net Core (net standard 2) Mvc 控制器,它使用 WebAPI (REST) 调用来获取数据。我关注了许多来自 Microsoft 和非 Microsoft 来源的 Internet 上显示的示例。这些都使用“标准” using(var client = new HttpClient()) 构造。
但是,请阅读 HttpClient 的文档
HttpClient 旨在被实例化一次并在整个过程中重复使用 应用程序的生命周期。实例化一个 HttpClient 类 每个请求都将耗尽大量可用的套接字数量 负载。这将导致 SocketException 错误。下面是一个例子 正确使用 HttpClient。
这让我开始思考,我是创建一个作用域实例并将其添加到 DI,还是按照他们在同一页面上的示例,并在控制器上创建一个静态实例?如果是静态实例,我该如何处置?
或者,任何人都可以为我指出标准 CRUD 视图实现的生产就绪 MVC 包装器吗?
【问题讨论】:
-
您仍然可以使用 DI。只需将其生命周期声明为单例(或您的 DI 用于单个实例而不是作用域的任何命名法),以使所有作用域共享相同的实例。
-
请注意,如果您的
httpclient位于具有singletone生命周期的服务中,并且如果该服务依赖于其他服务,那么这些其他服务不应该是scoped。
标签: c# rest asp.net-core-mvc asp.net-core-webapi