为了账号安全,请及时绑定邮箱和手机立即绑定

Netcore 2.1 ServiceCollection 添加通用类型的 HttpClients

Netcore 2.1 ServiceCollection 添加通用类型的 HttpClients

C#
胡子哥哥 2022-01-16 15:04:56
我遇到了 Netcore 2.1 向 ServiceCollection 添加多个通用类型的HttpClient的问题。这没有按预期工作,它给了我奇怪的结果。考虑我的测试var services = new ServiceCollection();services.AddHttpClient<IHttpGenericClientFactory<test1>, HttpGenericClientFactory<test1>>(client =>{    client.BaseAddress = new Uri("https://test1.com/");});services.AddHttpClient<IHttpGenericClientFactory<test2>, HttpGenericClientFactory<test2>>(client =>{    client.BaseAddress = new Uri("https://test2.com/");});现在尝试解决每个服务时var provider = services.BuildServiceProvider();var service1 = provider.GetService<IHttpGenericClientFactory<test1>>();var service2 = provider.GetService<IHttpGenericClientFactory<test2>>();当我检查service1.BaseAddress值是“ https://test2.com/ ”并且service2.BaseAddress也是“ https://test2.com/ ”。无论我尝试了什么,该服务总是解析或引用已添加的最后一个通用类型服务。这是框架中的错误吗?任何人都知道为什么这不能正常工作?这绝对与通用类型的 http 客户端有关。我的通用类和接口public interface IHttpGenericClientFactory<out T3>{    HttpClient HttpClient { get; set; }    Task<T1> Get<T1, T2>(T2 request, string path);}public class HttpGenericClientFactory<T3> : IHttpGenericClientFactory<T3>{    public HttpClient HttpClient { get; set; }    public HttpGenericClientFactory(HttpClient httpClient) => this.HttpClient = httpClient;    public async Task<T1> Get<T1,T2>(T2 request, string path)    {        var response = await HttpClient.GetAsync(path);        response.EnsureSuccessStatusCode();        return await response.Content.ReadAsAsync<T1>();    }}
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

您无法根据泛型类型参数的泛型类型参数的差异进行解析。我可以推荐的最好的事情是创建具体的推导,然后您可以明确引用:


public class Test1ClientFactory : HttpGenericClientFactory<Test1> {}


public class Test2ClientFactory : HttpGenericClientFactory<Test2> {}

然后:


services.AddHttpClient<Test1ClientFactory>(client =>

{

    client.BaseAddress = new Uri("https://test1.com/");

});


services.AddHttpClient<Test2ClientFactory>(client =>

{

    client.BaseAddress = new Uri("https://test2.com/");

});


查看完整回答
反对 回复 2022-01-16
  • 1 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信