После рефакторинга приведенного ниже кода для удаления лямбда-выражений я обнаружил ошибку CA2000, потому что handler
не удаляется (MockDelegatingHandler
равно IDisposable
). Если посмотреть на описание для CA2000 , это будет означать, что handler
все еще находится в области действия в приведенном ниже коде. Не очень понятно, какой будет в данном случае этот объем. Что такого в объявлении в лямбде, из-за которого CA2000 не применяется к handler
?
Этот код не содержит ошибки CA2000 для handler
public void NoCA2000Example()
{
var httpClientFactory = new MockHttpClientFactory((name) =>
{
var handler = new MockDelegatingHandler( // I would expect CA2000, but alas there is none
async (request, cancellationToken) =>
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent(JsonSerializer.Serialize(expectedDTO));
response.Content.Headers.ContentType =
System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json");
return await Task.FromResult(response).ConfigureAwait(false);
});
return new HttpClient(handler);
});
}
Этот код содержит ошибку CA2000 для handler
public HttpClient GetMockedClient(string name)
{
var handler = new MockDelegatingHandler( // CA2000
async (request, cancellationToken) =>
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent(JsonSerializer.Serialize(expectedDTO));
response.Content.Headers.ContentType =
System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json");
return await Task.FromResult(response).ConfigureAwait(false);
});
return new HttpClient(handler);
}
public void CA2000Example()
{
var httpClientFactory = new MockHttpClientFactory(GetMockedClient);
}
Что такого в первом блоке кода, что он не вызывает ошибку CA2000?