我正在努力让DI在autofac中为IHttpClientFactory工作。
通常,我使用.net核心依赖注入系统,并执行以下操作:
services.AddHttpClient(HttpClientConstants.HttpClientNameA, client =>
{
client.BaseAddress = new Uri(MyConfig.MyBaseUrl);
});但是,现在我正在使用一个使用Autofac的网络框架项目。我在互联网上看过,根据我发现的教程,我尝试过这样做:
builder.Register(ctx => new HttpClient() { BaseAddress = new Uri(MyConfig.MyBaseUrl) })
.Named<HttpClient>(HttpClientConstants.HttpClientNameA)
.SingleInstance();
builder.Register(c => c.Resolve<IHttpClientFactory>().CreateClient())
.As<HttpClient>();
builder.RegisterType<MyService>().As<IMyService>();但是,当我试图像这样使用它时,它会崩溃,并且我会得到一个Autofac错误,说明它无法找到构造函数来构建我的服务。
public class MyService: IMyService
{
private readonly IHttpClientFactory httpClientFactory;
public MyService(IHttpClientFactory httpClientFactory)
{
this.httpClientFactory = httpClientFactory;
}
}知道我怎么能让它起作用吗?这甚至是可能的,或者我根本不应该使用IHttpClientFactory并使用另一种方法?(就像直接注入httpclient构造函数一样)
发布于 2022-09-07 15:43:09
我已经成功地以这种方式在.netStandard 2.0库中注册了工厂:
containerBuilder.Register<IHttpClientFactory>(_ =>
{
var services = new ServiceCollection();
services.AddHttpClient();
var provider = services.BuildServiceProvider();
return provider.GetRequiredService<IHttpClientFactory>();
});ServiceCollection位于名称空间'Microsoft.Extensions.DependencyInjection‘中,应该在使用这个nuget包的.net框架中可用。
https://stackoverflow.com/questions/73608744
复制相似问题