是否可以在OnStart()中的Xamarin Forms应用程序中创建一个httpclient实例,并在我的应用程序中的任何地方使用它。如何在Xamarin表单中的HttpClient上创建实例
0
A
回答
2
是的,你可以在你的应用中对所有请求使用相同的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,超时,接头,验证信息等,您将需要重写Equals方法的类比较是否存在相同的配置。
public override bool Equals(object obj)
{
// Logic to determine whether it is same config
}
+0
单例模式 –
+0
你能给我一个你的类的示例来管理Httpclient吗? – Afshin
相关问题
- 1. 在BackgroundWorker中创建表单的实例
- 2. Xamarin表单HttpClient GetAsync在iOS中失败
- 3. Xamarin Forms - 如何在视觉上创建表单
- 4. 如何在单个levelDB实例中创建多个逻辑表?
- 5. 如何创建在模型实例之间切换的表单?
- 6. 如何在Xamarin表单中实现搜索建议
- 7. ExtJS的4创建表单实例
- 8. 如何在不创建表单的新实例的情况下切换表单?
- 9. 如何在xamarin表单中的标签上创建点击事件动态
- 10. 如何在Xamarin表单中创建自定义弹出框
- 11. 如何在Xamarin表单中创建半屏相机视图
- 12. 如何单元测试实例创建?
- 13. 如何在xamarin上创建“private void backgroundWorker”
- 14. 如何在Flash中“创建实例”?
- 15. 如何在BlackBerry中创建HTTPClient
- 16. 如何从列表创建类实例?
- 17. Xamarin表单HTTPClient调用崩溃
- 18. 创建多个表单实例
- 19. 如何创建表单的不同实例
- 20. 如何列出模型的实例并使表单在同一视图上创建实例?
- 21. 如何在PHP中创建单例?
- 22. Spring创建单例的多个实例?
- 23. 在Xamarin中使用HttpClient的SendAsync表单不等待
- 24. 如何创建CommonsMultipartFile实例
- 25. 如何创建QWebFrame实例
- 26. 如何*不*创建实例
- 27. 如何创建AsyncTask实例
- 28. 如何创建Solr实例
- 29. 如何在表单中创建嵌套属性的多个实例
- 30. 如何在单个tomcat实例中创建两个listners?
是不是一个好主意,HttpClient的应在THEAD安全被调用,应该是一次性的,以正确地关闭所有网络连接 – OrcusZ
@OrcusZ这是不正确的。你应该绝对重用一个HttpClient实例。 [问题](https://stackoverflow.com/questions/15705092/do-httpclient-and-httpclienthandler-have-to-be-disposed) –
@WillDecker所以MS文件和来源错误?您可以使用单个实例或createInstance方法。但是你应该检查实例是否需要处理。此外,HttpClient已经是线程安全的,但不是所有的方法,所以你应该在线程安全的场景中使用方法 – OrcusZ