Как вы справляетесь с CA2000 (удаление IDisposable объектов), когда объекты помещаются в контейнер внедрения зависимостей? - PullRequest
1 голос
/ 04 октября 2019

По мнению Microsoft, лучшая практика для HttpClient - поддерживать одноэлементную версию HttpClient (перефразируя, но это результат. Не выбрасывайте ее немедленно). Мое собственное тестирование показало, что у одного экземпляра есть определенные преимущества при выполнении масштабных операций Http по сравнению с воссозданием HttpClient для каждого сообщения. Поэтому, естественно, имеет смысл поместить HttpClient в контейнер DI.

    // Initialize the HTTP client.
    HttpClient httpClient = new HttpClient();
    httpClient.Timeout = Timeout.Infinite;
    httpClient.BaseAddress = new Uri("https://localhost");
    serviceCollection.AddSingleton(httpClient);

Проблема в том, что я получаю предупреждения от StyleCop: CA2000: Удалите объекты перед потерей области действия. Очевидно, что я могу подавить, но это беспокоит меня, потому что есть другие IDisposable объекты, которые, возможно, захотят поместить в контейнер DI. Действительно ли это предупреждение при использовании шаблона DI? Есть ли какие-нибудь хитрости с этим?

1 Ответ

0 голосов
/ 22 октября 2019

Та же проблема, те же мысли.

Что вы можете сделать, это присвоить его полю

например this.httpClient = new HttpClient ();

это, вероятно,В любом случае, неплохая идея для синглетонов, так что у них есть явный владелец за пределами МОК.

...