У меня есть ряд служб, которые требуют использования типизированного HttpClient из HttpClientFactory.
Хотя я могу разрешить одну службу, я не могу разрешить 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: ни один из конструкторов, найденных с 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' для типа 'ConsoleApp2.MyHttpClient', не может быть вызван с доступными службами и параметрами:
Не удается разрешить параметр «System.Net.Http.HttpClient client» конструктора «Void .ctor (System.Net.Http.HttpClient)».
`` `
Проблема в том, что AddHttpClient добавляет собственную регистрацию IMyHttpClient. Но я хочу зарегистрироваться только с помощью Autofac! Есть ли способ использовать типизированные клиенты, но при этом оставаться с Autofac?