У меня есть следующий класс, чтобы иметь возможность обслуживать файлы из ресурсов указанного проекта:
public class ConfigureOptions : IPostConfigureOptions<StaticFileOptions>
{
private readonly IHostingEnvironment environment;
public ConfigureOptions(IHostingEnvironment environment)
{
this.environment = environment;
}
public void PostConfigure(string name, StaticFileOptions options)
{
options.ContentTypeProvider = options.ContentTypeProvider ?? new FileExtensionContentTypeProvider();
if (options.FileProvider == null && environment.WebRootFileProvider == null)
{
throw new InvalidOperationException("Missing FileProvider.");
}
options.FileProvider = options.FileProvider ?? environment.WebRootFileProvider;
var filesProvider = new ManifestEmbeddedFileProvider(GetType().Assembly, "Resources");
options.FileProvider = new CompositeFileProvider(options.FileProvider, filesProvider);
}
}
Эта настройка затем включается в startup.cs
:
services.ConfigureOptions(typeof(Emails.ConfigureOptions));
Теперь у меня есть служба, которая получает IFileProvider
через конструктор:
public HtmlToEmailConverter(IFileProvider fileProvider)
{
this.fileProvider = fileProvider ?? throw new ArgumentNullException(nameof(fileProvider));
}
Я получаю ошибку DI при попытке использовать свой сервис:
Не удаетсяразрешить службу для типа «Microsoft.Extensions.FileProviders.IFileProvider» при попытке активировать «...».
Итак, мне нужно зарегистрировать службу для IFileProvider
, но хотелось бы получитьэкземпляр, который использует остальная часть базовой инфраструктуры asp.net - тот, который теперь может обслуживать как физические, так и встроенные файлы.
Как зарегистрировать службу для IFileProvider
?
Другими словами, как добраться до того IFileProvider, который остальная часть приложения использует при обслуживании статических файлов.