gpt4 book ai didi

Autofac 无法解析类型化 HttpClient 的枚举

转载 作者:行者123 更新时间:2023-12-01 22:54:52 26 4
gpt4 key购买 nike

我有许多服务需要使用 HttpClientFactory 中的类型化 HttpClient。虽然我可以解析一项服务,但无法解析该服务的 IEnumerable。

interface IMyHttpClient
{
}

class MyHttpClient: IMyHttpClient
{
public MyHttpClient(HttpClient client)
{
}
}

class Program
{
static void Main(string[] args)
{
var services = new ServiceCollection();
services.AddHttpClient()
.AddHttpClient<IMyHttpClient, MyHttpClient>();

var builder = new ContainerBuilder();
// Exception goes away when remove this line
builder.RegisterType<MyHttpClient>().As<IMyHttpClient>();
builder.Populate(services);
var provider = builder.Build();

// ============== This works
// provider.Resolve<IMyHttpClient>();

// ============== This throws exception
provider.Resolve<IEnumerable<IMyHttpClient>>();
}
}

构造函数将被调用一次,然后抛出异常:

```DependencyResolutionException:在类型“ConsoleApp2.MyHttpClient”上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的构造函数都不能使用可用的服务和参数调用:无法解析构造函数“Void .ctor(System.Net.Http.HttpClient)”的参数“System.Net.Http.HttpClient client”。

```

问题是 AddHttpClient 添加了它自己的 IMyHttpClient 注册。但我确实只想使用 Autofac 进行注册!有没有办法在使用类型化客户端的同时仍然使用 Autofac?

最佳答案

该异常说明 Autofac 无法解析参数“System.Net.Http.HttpClient client”。我想这是因为这种类型没有在您的容器中注册以进行 IMyHttpClient 的第二次注册。节省优势HttpClientFactory您可以注册显式构造函数参数,例如如下所示:

static void Main(string[] args)
{
var services = new ServiceCollection();
services.AddHttpClient();

var builder = new ContainerBuilder();
// exclicit resolving client for constructor
builder.RegisterType<MyHttpClient>().As<IMyHttpClient>().WithParameter(
(p, ctx) => p.ParameterType == typeof(HttpClient),
(p, ctx) => ctx.Resolve<IHttpClientFactory>().CreateClient());

builder.Populate(services);
var provider = builder.Build();

// ============== This works
provider.Resolve<IMyHttpClient>();

// ============== This works too
provider.Resolve<IEnumerable<IMyHttpClient>>();
}

在此示例中Resolve<IEnumerable<IMyHttpClient>>返回单个 IMyHttpClient 的枚举,用 HttpClient 初始化来自核心 HttpClientFactory。

UPD:该帖子已由@norekhov 评论更新

关于Autofac 无法解析类型化 HttpClient 的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52291150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com