是否可以创建一个 httpclient
在Xamarin Forms应用程序中 OnStart()
并在我的应用程序中到处使用它?
是的,您可以为您的应用程序中的所有请求使用同一个httpclient。但您需要注意的是,如果有的API具有不同的基本URL或头信息,那么您将需要为其创建另一个httpclient。
我所做的是我有一个类来管理HttpClient实例。如果没有与HttpConfig匹配的实例,它将创建并存储它。如果已经有了一个实例,它将只返回它。
代码示例(HttpService是依赖注入的)。
public class HttpService : IHttpService
{
private static readonly int MAX_CLIENT = 5;
private Dictionary<HttpConfig, HttpClient> mClients;
private Queue<HttpConfig> mClientSequence;
public HttpService()
{
mClients = new Dictionary<HttpConfig, HttpClient>();
mClientSequence = new Queue<HttpConfig>();
}
private HttpClient CreateHttpClientAsync(HttpConfig config)
{
HttpClient httpClient;
if (mClients.ContainsKey(config))
{
httpClient = mClients[config];
}
else
{
// TODO: Create HttpClient...
if (mClientSequence.Count >= MAX_CLIENT)
{
// Remove the first item
var removingConfig = mClientSequence.Dequeue();
mClients.Remove(removingConfig);
}
mClients[config] = httpClient;
mClientSequence.Enqueue(config);
}
return httpClient;
}
...
}
HttpConfig是我存储BaseUrl, Timeout, Headers, Auth信息等的类。你需要重写类中的Equals方法来比较是否存在相同的配置。
public override bool Equals(object obj)
{
// Logic to determine whether it is same config
}