Ошибка CA2000 при создании IDisposable внутри лямбда - PullRequest
0 голосов
/ 01 августа 2020

После рефакторинга приведенного ниже кода для удаления лямбда-выражений я обнаружил ошибку 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...