Правильный способ очистки «предварительного» экземпляра ServiceCollection и ServiceProvider?
Я реализую поставщика настраиваемых конфигураций в своем приложении.
В этом провайдере я должен сделать вызов REST API. Для успешного выполнения этого вызова требуется действительный токен OAuth 2. Чтобы получить этот токен, мне нужно полусложное дерево зависимостей классов.
Для остальной части моего приложения я просто использую внедрение зависимостей, чтобы получить нужный экземпляр. Но пользовательский поставщик конфигурации вызывается задолго до настройки внедрения зависимостей.
Я думал о создании "Pre" экземпляра инъекции зависимостей. Как это:
IServiceCollection services = new ServiceCollection();
// Setup the DI here
IServiceProvider serviceProvider = services.BuildServiceProvider();
var myTokenGenerator = serviceProvider.GetService<IMyTokenGenerator>();
Но я читал, что когда вы делаете другой , это может вызвать проблемы. Я хотел бы знать, как избежать этих проблем.
Как правильно очистить экземпляр "pre-DI"
(Примечание: похоже, ни один из них не реализует IDisposable.)
1 ответ
Хм, я не понимаю, почему вы хотите сделать это именно так. Я бы, вероятно, полностью построил Serviceprovider.
Чтобы извлеченные службы не влияли друг на друга, я бы использовал вложенные контейнеры/области, что означает, что если вы извлекаете одну и ту же службу, вы получаете разные экземпляры для каждого контейнера/области.
Надеюсь, я понял, чего вы хотите добиться. См. раздел .NET Core IServiceScopeFactory.CreateScope() и расширение IServiceProvider.CreateScope().