Есть ли хороший способ получить ServiceProvider
в AddOpenIdConnect
, или , настроить ClientSecret позже, когда у нас полностью настроен контейнер DI? (например, в Configure(IApplicationBuilder app)
)
Мы получаем секрет клиента откуда-то еще, и нам нравится использовать для этого DI.
В настоящее время мы делаем это, но мне очень нравится удалять services.BuildServiceProvider()
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddOpenIdConnect(AuthenticationScheme, options =>
{
ServiceProvider serviceProvider = services.BuildServiceProvider(); // we like to prevent this
options.ClientSecret = serviceProvider.GetRequiredService<ISecretRetriever>().GetClientSecret();
Примечания
Для таких событий, как OnValidatePrincipal
, мы могли бы получить его из CookieValidatePrincipalContext.HttpContext.RequestServices
Использование services.BuildServiceProvider()
выдаст следующее предупреждение:
предупреждение «Вызов BuildServiceProvider из кода приложения приводит к созданию дополнительной копии служб Singleton»