作为我正在开发的ASP.Net Core项目的一部分,我需要从WebApi内与许多不同的基于Rest的API终端进行通信。为了实现这一点,我使用了许多服务类,每个类都实例化了一个静态的
下面是每个服务类中静态
有什么办法可以使服务类中的
我想到的一种方法是不使用静态字段来保存服务类中的
HttpClient
。本质上,我为WebApi连接的每个基于Rest的终端都有一个服务类。下面是每个服务类中静态
HttpClient
的实例化示例。private static HttpClient _client = new HttpClient()
{
BaseAddress = new Uri("http://endpointurlexample"),
};
虽然以上方法很有效,但它不允许对使用HttpClient
的服务类进行有效的单元测试。为了进行单元测试,我有一个假的HttpMessageHandler
,我希望在我的单元测试中使用它来代替HttpClient
,而HttpClient
则像上面实例化一样。然而,我无法将假的HttpMessageHandler
应用于我的单元测试中。有什么办法可以使服务类中的
HttpClient
在整个应用程序中保持单一实例(每个端点一个实例),但允许在单元测试期间应用不同的HttpMessageHandler
呢?我想到的一种方法是不使用静态字段来保存服务类中的
HttpClient
,而是允许通过构造函数注入以单例生命周期方式引入,这将允许我在单元测试期间指定一个带有所需HttpMessageHandler
的HttpClient
。我想到的另一种选择是使用一个HttpClient
工厂类,该类在静态字段中实例化HttpClient
,然后可以通过将HttpClient
工厂注入服务类来检索它们,从而允许返回具有相关HttpMessageHandler
的不同实现,以进行单元测试。然而,以上任何一个方法都不够完美,似乎还有更好的方法?如果您有任何问题,请告诉我。