我有许多服务需要使用来自 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”的构造函数:无法解析参数“System.Net.Http.HttpClient”构造函数'Void .ctor(System.Net.Http.HttpClient)'的客户端'。
```
问题是 AddHttpClient 添加了它自己的 IMyHttpClient 注册。但我只想使用 Autofac 注册!有没有办法使用类型化的客户端但仍然使用 Autofac?