我们的MVC应用程序使用HttpClient调用WebAPI动作。我决定使用StructureMap注入HttpClient并在控制器中覆盖dispose方法。
StructureMap的ObjectInitialize基本上看起来像这样...
但我仍然收到了违规通知。
public HomeController(HttpClient httpClient)
{
_httpClient = httpClient;
}
protected override void Dispose(bool disposing)
{
if (disposing && _httpClient != null)
{
_httpClient.Dispose();
}
base.Dispose(disposing);
}
StructureMap的ObjectInitialize基本上看起来像这样...
x.For<HttpClient>().Use(() => new HttpClient() { BaseAddress = "my/uri/"});
当我构建这个项目时,CodeAnalysis会抱怨"Dispose objects before losing scope"
并指向IoC代码。
我能否忽略这个问题,或者在哪里需要处理HttpClient的Dispose?我也尝试过...
protected void Application_EndRequest(object sender, EventArgs e)
{
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
但我仍然收到了违规通知。
HttpContextScoped
后,ReleaseAndDisposeAllHttpScopedObjects
方法将会起作用。 - PHeiberg