Я создаю собственный провайдер файлов, который реализует IFileProvider в AspNetCore 2. Поставщик файлов обратится к веб-сервису (consumerBrandingRepository), чтобы получить представления. Веб-сервис настроен при запуске и будет кэшировать данные (через IMemoryCache), которые он получает. Веб-сервис работает безупречно.
Проблема в том, что, поскольку я вызываю BuildServiceProvider, чтобы получить доступ к конфигурации службы, я заканчиваю с MemoryCache, который работает для приложения, и еще одним, который работает для провайдеров файлов. Для полного раскрытия ConsumerBrandingRepository представляет собой абстракцию над хранилищем Azure, и его цель - сделать возможным изменение некоторых представлений, относящихся к клиенту, без повторного развертывания всего приложения.
Какой правильный способ получить доступ к службамизнутри services.Configure блок, показанный ниже?
services.AddSingleton<IMemoryCache, MemoryCache>();
services.AddTransient<IConsumerBrandingRepository>(x => new CachedAzureConsumerBrandingRepository(new AzureConsumerRepository(azureConfig), x.GetRequiredService<IMemoryCache>()));
services.Configure<RazorViewEngineOptions>(options =>
{
var serviceProvider = services.BuildServiceProvider();
var logger = serviceProvider.GetRequiredService<ILogger<SettingsFileProvider>>();
var consumerBrandingRepository = serviceProvider.GetRequiredService<IConsumerBrandingRepository>();
var clientKeyFactory = serviceProvider.GetRequiredService<IClientKeyFactory>();
options.FileProviders.Clear();
options.FileProviders.Add(new CompositeFileProvider(
new SettingsFileProvider(consumerBrandingRepository, logger, clientKeyFactory),
new PhysicalFileProvider(_hostingEnvironment.ContentRootPath)));
});
Edit: несогласованное предложение Edit Добавлено больше деталей.