Как получить доступ к службе, добавленной в контейнер DI, изнутри метода ConfigurationServices Asp.Net CoreC#

Место общения программистов C#
Ответить
Anonymous
 Как получить доступ к службе, добавленной в контейнер DI, изнутри метода ConfigurationServices Asp.Net Core

Сообщение Anonymous »

Пример кода ниже взят из метода Asp.Net Core ConfigurationServices в Startup.cs.

Сначала я регистрирую одноэлементную службу под названием AppState. После этого я настраиваю OpenIdConnect, и внутри лямбды OnTokenValidated мне нужно получить доступ к службе AppState, которую я только что зарегистрировал в контейнере DI выше.

Какой самый элегантный способ доступа к экземпляру службы AppState?

Я бы предпочел не вызывать Services.BuildServiceProvider() внутри метода ConfigurationServices, если это вообще возможно.

services.AddSingleton();

services.Configure(AzureADB2CDefaults.OpenIdScheme, options =>
{
options.Events = new OpenIdConnectEvents
{
OnTokenValidated = async ctx =>
{
//How to get access to instance of AppState,
//which was added to DI container up above
AppState appState = //{get from DI somehow};
appState.DoSomething();
}
};
});


РЕДАКТИРОВАТЬ: Используя ответ ниже, я отредактировал код следующим образом, но могу подтвердить, что событие OnTokenValidated не срабатывает, в отличие от приведенного выше кода в моем оригинале. вопрос, который стреляет:

services.AddOptions(AzureADB2CDefaults.OpenIdScheme)
.Configure((options, sp) => {
using (var scope = sp.CreateScope())
{
options.Events = new OpenIdConnectEvents
{
OnTokenValidated = async ctx =>
{
var appState = scope.ServiceProvider.GetRequiredService();

await appState.Dosomething();
}
};
}
});


Подробнее здесь: https://stackoverflow.com/questions/610 ... es-configu
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»