尝试激活服务时无法解析类型 'System.Lazy`1[System.Net.Http.IHttpClientFactory]' 的服务
Unable to resolve service for type 'System.Lazy`1[System.Net.Http.IHttpClientFactory]' while attempting to activate service
我在尝试注入 Lazy 时遇到以下错误。
没有“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<IHttpClientFactory>
。 HttpClientFactory 本身是创建和缓存 HttpClients 实例的类型,或者更确切地说,HttpClientHandlers。
它 a singleton 由 DI 容器本身管理,所以 Lazy<IHttpClientFactory>
不会有任何影响,即使你让它编译。
AddHttpClient 的源代码显式地将默认的 HttpClientFactory 注册为单例。
public static IServiceCollection AddHttpClient(this IServiceCollection services)
{
if (services == null)
{
throw new ArgumentNullException(nameof(services));
}
services.AddLogging();
services.AddOptions();
//
// Core abstractions
//
services.TryAddTransient<HttpMessageHandlerBuilder, DefaultHttpMessageHandlerBuilder>();
services.TryAddSingleton<DefaultHttpClientFactory>();
我在尝试注入 Lazy 时遇到以下错误。
没有“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<IHttpClientFactory>
。 HttpClientFactory 本身是创建和缓存 HttpClients 实例的类型,或者更确切地说,HttpClientHandlers。
它 a singleton 由 DI 容器本身管理,所以 Lazy<IHttpClientFactory>
不会有任何影响,即使你让它编译。
AddHttpClient 的源代码显式地将默认的 HttpClientFactory 注册为单例。
public static IServiceCollection AddHttpClient(this IServiceCollection services)
{
if (services == null)
{
throw new ArgumentNullException(nameof(services));
}
services.AddLogging();
services.AddOptions();
//
// Core abstractions
//
services.TryAddTransient<HttpMessageHandlerBuilder, DefaultHttpMessageHandlerBuilder>();
services.TryAddSingleton<DefaultHttpClientFactory>();