【发布时间】:2019-07-31 12:29:54
【问题描述】:
有一个应用程序有 3 个接口,想要使用这个应用程序的人需要实现这些接口。我创建了一个类库项目,它具有这些接口实现,我从同一个基类继承了所有这些接口实现,以便能够拥有一个 HttpClient。这是我到目前为止所做的:
public class BaseProxy
{
protected static readonly HttpClient Client;
static BaseProxy()
{
Client = new HttpClient();
}
}
我在所有派生类中都使用了这个客户端来发出 GetAsync 和 PostAsync 请求,如下所示:
public class XProxyImplementation
{
var response = Client.GetAsync(BaseUrl + "XXXApi/GetClientSettings/").Result;
response.EnsureSuccessStatusCode();
}
顺便说一句,Web API 中的方法都不是异步的,我选择了单例解决方案,因为我不想对每个请求都使用 using 块。我的问题是我应该选择 DI 解决方案还是该代码足以用于内部使用的应用程序?欢迎提出任何改进建议。
我已经阅读了很多关于使用 DI 容器的答案,但这只是一个带有代理实现的类库。
我的另一个问题是即使我想使用 DI,目前我无法在我的构造函数类中引入 DI,因为使用我的实现的其他应用程序正在寻找一个空的构造函数。当我尝试将 HttpClient 参数传递给构造函数时,出现以下错误:
当前类型 System.Net.Http.HttpMessageHandler 是一个抽象 类,无法构造
使用我的 dll 的应用程序不允许我将任何参数传递给使用任何抽象类的构造函数。我猜这个应用程序使用 Unity 进行握手,并以某种方式寻找一个空的构造函数。一旦我尝试进行以下更改,我就会收到错误消息:
public BaseProxy() : this(Service.HttpClient)
{
}
public XProxyImplementation(HttpClient client) : base(client)
{
}
这就是为什么我实际上更喜欢单例实例而不是 DI 实现。
【问题讨论】:
标签: c# .net httpclient