ASP 网络核心依赖注入 - 处置
ASP Net Core Dependency Injection - dispose
根据 Microsoft 的文档,IOC Container
负责清理它创建的类型并在 IDisposable
接口上调用 Dispose
https://docs.microsoft.com/en-us/dotnet/core/extensions/dependency-injection-guidelines#:~:text=Disposal%20of%20services
-> 那么当在注入对象的 context
中生成接口时,容器是否也会在 IDisposable
接口上调用 Dispose?
例如:
在 startup.cs:
services.AddhttpClient<CustomClient>(c => {
c.BaseAddress = new Uri(Configuration["Endpoint"]);
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));});
在这种情况下,CustomClient 将由 IOC Container 释放,开发者不需要调用释放。
在自定义客户端中:
var request = new HttpRequestMessage(HttpMethod.Get, $"api/users/{email}");
HttpResponseMessage httpResponse = await
httpClient.SendAsync(request).ConfigureAwait(false);
HttpResponseMessage
实现 IDisposable
,我需要使用 using HttpResponseMessage httpResponse = await httpClient.SendAsync(request).ConfigureAwait(false);
所以 dispose 会被调用,还是这个资源也被容器处理了?
is this resource also disposed by the container?
容器只处理向提供者注册并由提供者创建的实例。在这种情况下,HttpResponseMessage
由 HttpClient
创建,应由您的代码处理。
根据 Microsoft 的文档,IOC Container
负责清理它创建的类型并在 IDisposable
接口上调用 Dispose
https://docs.microsoft.com/en-us/dotnet/core/extensions/dependency-injection-guidelines#:~:text=Disposal%20of%20services
-> 那么当在注入对象的 context
中生成接口时,容器是否也会在 IDisposable
接口上调用 Dispose?
例如: 在 startup.cs:
services.AddhttpClient<CustomClient>(c => {
c.BaseAddress = new Uri(Configuration["Endpoint"]);
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));});
在这种情况下,CustomClient 将由 IOC Container 释放,开发者不需要调用释放。
在自定义客户端中:
var request = new HttpRequestMessage(HttpMethod.Get, $"api/users/{email}");
HttpResponseMessage httpResponse = await
httpClient.SendAsync(request).ConfigureAwait(false);
HttpResponseMessage
实现 IDisposable
,我需要使用 using HttpResponseMessage httpResponse = await httpClient.SendAsync(request).ConfigureAwait(false);
所以 dispose 会被调用,还是这个资源也被容器处理了?
is this resource also disposed by the container?
容器只处理向提供者注册并由提供者创建的实例。在这种情况下,HttpResponseMessage
由 HttpClient
创建,应由您的代码处理。