jle*_*bke 4 structuremap dependency-injection asp.net-mvc-4 asp.net-web-api dotnet-httpclient
我们的MVC应用程序使用HttpClient调用WebAPI操作.我决定使用StructureMap注入HttpClient并在控制器中覆盖dispose
public HomeController(HttpClient httpClient)
{
_httpClient = httpClient;
}
protected override void Dispose(bool disposing)
{
if (disposing && _httpClient != null)
{
_httpClient.Dispose();
}
base.Dispose(disposing);
}
Run Code Online (Sandbox Code Playgroud)
StructureMap ObjectInitialize基本上看起来像这样..
x.For<HttpClient>().Use(() => new HttpClient() { BaseAddress = "my/uri/"});
Run Code Online (Sandbox Code Playgroud)
当我构建它时,CodeAnalysis会抱怨"Dispose objects before losing scope"并指向IoC代码.
我可以抑制它,或者我需要在何处处理HttpClient?我也试过了
protected void Application_EndRequest(object sender, EventArgs e)
{
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
Run Code Online (Sandbox Code Playgroud)
但我仍然违反规则.
处置HttpClient会清除任何活动的取消令牌和任何部分完成的请求/响应.在大多数正常情况下,处理它并不是必需的,尽管按照惯例你应该这样做.请注意,配置HttpClient会强行关闭TCP连接.
如果您的MVC应用程序正在对同一服务器进行大量调用,则可能需要跨请求保留HttpClient实例并重新使用它.这将避免您每次都必须重新设置默认请求标头,并且它将允许重用TCP连接.
| 归档时间: |
|
| 查看次数: |
1726 次 |
| 最近记录: |