Внедрение зависимостей Singleton в Transient - PullRequest
0 голосов
/ 24 мая 2019

Если у меня есть сервис, который вставляется как Transient, но имеет зависимость от IMemoryCache, который вводится как Singleton в конструктор, это вызовет утечку памяти?Похоже, что временная служба никогда не будет GCd из-за этой ссылки на IMemoryCache.Это тот случай?

1 Ответ

2 голосов
/ 24 мая 2019

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

Вы можете прочитать о том, как синглтоны, переходные процессы и области видимости работают в этом вопросе: Различия в службах AddTransient, AddScoped и AddSingleton?

UPDATE

Ваша одноэлементная служба никогда не будет собираться с момента первой инъекции, которая будет существовать во время работы вашего приложения. У резольвера всегда будет ссылка именно на этот одноэлементный сервис. Однако ссылки на временную службу не будет, поэтому она будет собираться, даже если она содержит ссылку на одноэлементный пакет, а сборная информация о одиночном объекте не зависит от срока службы временной службы.

P.S

Если вы хотите отслеживать утечки памяти, прочтите это: https://devblogs.microsoft.com/devops/diagnosing-memory-issues-with-the-new-memory-usage-tool-in-visual-studio/

...