.net-core - .NET Core 依赖注入在更新到版本 5.0.0 后给出“不明确的构造函数”错误
问题描述
我有许多使用 API 服务的类,其构造函数遵循以下模式:
public class SomeClass
{
public SomeClass(IHttpClientFactory factory, ILogger<SomeClass> logger = null)
{
// ...
}
public SomeClass(HttpClient client, ILogger<SomeClass> logger = null)
{
// ...
}
}
第一个构造函数是 .NET Core 内置依赖注入使用的构造函数(通过IServicesCollection.AddHttpClient()
从Startup.ConfigureServices()
方法调用,然后IHttpClientFactory.CreateClient()
在构造函数中调用);第二个构造函数主要用于单元测试,以允许HttpClient
传入(或模拟)。这一直工作到现在,但今天早上我开始收到如下错误:
发生了未处理的异常
System.InvalidOperationException:无法激活类型“服务”。以下构造函数有歧义:Void .ctor(System.Net.Http.IHttpClientFactory, Microsoft.Extensions.Logging.ILogger`1[Service])Void .ctor(System.Net.Http.HttpClient, Microsoft.Extensions.Logging.ILogger `1[Service]) 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache 生命周期,类型 serviceType,类型 implementationType,CallSiteChain callSiteChain)
...省略了长堆栈跟踪...
这一直工作到现在。看起来很奇怪,依赖注入机制认为构造函数在不共享任何公共接口IHttpClientFactory
时是模棱两可的。HttpClient
我在周末将 Visual Studio 19 更新到了最新版本 (16.8.2) 和解决方案中的所有 NuGet 包。该Microsoft.Extensions.DependencyInjection
软件包现在是 5.0.0 版;以前是 3.1.9 版。我现在已经通过删除接受HttpClient
参数的构造函数并替换我的测试中的代码以使用模拟IHttpClientFactory
来解决这个问题,因此实际影响很小。但是,如果不出意外的话,这将有助于我内心的平静,以了解为什么这首先会破裂。我忽略了配置 .NET Core 依赖注入的某些方面吗?或者解决依赖关系的策略在 3.1.9 和 5.0.0 版本之间是否发生了微妙的变化?
解决方案
推荐阅读
- r - 在“geom_signif”函数中找不到对象
- laravel - 如何在 Laravel 中使用混合版本控制?
- azure - 集成后 Azure Web 应用程序请求未通过 VNET
- python-3.x - 有没有办法在 Windows 10 上安装 h2o driverless ai?
- c - 您可以添加到 C 中的变量中的唯一关键字的最大数量是多少?
- node.js - 在带角度的电子内部使用keytar
- iis-10 - IIS 中 Web 应用程序文件夹中存储的 web.config 文件中的 system.webServer 和 system.web 设置的范围是什么?
- python - Python 类返回一个空字典
- tensorflow - 我安装了 tensorflow 包,但它显示以下错误,我该怎么办?
- python - 使用 for 循环确定 True 或 False