【发布时间】:2021-12-16 07:23:09
【问题描述】:
我在尝试注入 Lazy 时遇到以下错误。
没有“懒惰”也能正常工作
我已经在 startup.cs 中像下面这样注册了它。
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
..
..
}
我正在尝试将其注入如下控制器:
private readonly Lazy<IHttpClientFactory> _clientFactory;
protected IHttpClientFactory ClientFactory => _clientFactory.Value;
public ValuesController(Lazy<IHttpClientFactory> clientFactory)
{
_clientFactory = clientFactory;
}
在这里,我收到一个错误:
System.InvalidOperationException: 'Unable to resolve service for type 'System.Lazy`1[System.Net.Http.IHttpClientFactory]' while attempting to activate 'POC.Core.Controllers.ValuesController'.'
任何想法,延迟初始化可能是什么问题?
【问题讨论】:
-
你为什么使用
Lazy<>?你期望它做什么? HttpClientFactory 本身就是用于创建其他类型实例的类型。它本质上是一个由 DI 容器本身管理的单例,所以Lazy<IHttpClientFactory>不会有任何影响 -
内置的依赖注册不会在
Lazy<T>中包装值 - 你要么必须自己做(这增加了一点好处并增加了复杂性),要么只是不使用Lazy<T>和自行解决服务。 -
@MartinCostello:我过去曾这样做过(可能使用旧版本的 microsoft.extensions.http)。是不是因为 microsoft.extensions.http 的更新版本?由于大量依赖,我无法在当前项目中降级以验证这一点。
标签: c# .net asp.net-core dependency-injection dotnet-httpclient