Правильный способ очистки «предварительного» экземпляра 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().

Другие вопросы по тегам