У меня есть проект. NET Core 3 (недавно обновленный с 2.2), который использует распределенный кеш Redis и аутентификацию ie.
В настоящее время он выглядит примерно так:
public void ConfigureServices(IServiceCollection services)
{
// Set up Redis distributed cache
services.AddStackExchangeRedisCache(...);
...
services.ConfigureApplicationCookie(options =>
{
...
// Get a service provider to get the distributed cache set up above
var cache = services.BuildServiceProvider().GetService<IDistributedCache>();
options.SessionStore = new MyCustomStore(cache, ...);
}):
}
Проблема в том, что BuildServiceProvider()
вызывает ошибку сборки:
Startup.cs (...): предупреждение ASP0000: вызов BuildServiceProvider из кода приложения приводит к дополнительной копии Синглтон сервисы создаются. Рассмотрим альтернативы, такие как сервисы внедрения зависимостей в качестве параметров для «Конфигурирования».
Это не похоже на вариант - ConfigureApplicationCookie
находится в Startup.ConfigureServices
и может настраивать только новые сервисы, Startup.Configure
может использовать новые сервисы, но не может переопределить CookieAuthenticationOptions.SessionStore
в качестве моего собственного хранилища.
Я пытался добавить services.AddSingleton<ITicketStore>(p => new MyCustomRedisStore(cache, ...))
до ConfigureApplicationCookie
, но это игнорируется.
Явно установка CookieAuthenticationOptions.SessionStore
представляется как только способ заставить его использовать что-либо кроме локального хранилища памяти.
Каждый пример, который я нашел в Интернете использует BuildServiceProvider()
;
В идеале я хочу сделать что-то вроде:
services.ConfigureApplicationCookieStore(provider =>
{
var cache = provider.GetService<IDistributedCache>();
return new MyCustomStore(cache, ...);
});
Или
public void Configure(IApplicationBuilder app, ... IDistributedCache cache)
{
app.UseApplicationCookieStore(new MyCustomStore(cache, ...));
}
А затем CookieAuthenticationOptions.SessionStore
должен просто использовать все, что я настроено там.
Как заставить приложение повара ie использовать закачанный магазин?