[英]How to register IFileProvider for the dependency injection in asp.net core 2.2?
我有以下 class 以便能够从引用项目的资源中提供文件:
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 核心基础架构的 rest 正在使用的实例 - 现在可以同时提供物理文件和嵌入式文件的实例。
如何为IFileProvider
注册服务?
换句话说,在提供 static 文件时,如何访问应用程序的 rest 正在使用的 IFileProvider。
尽管解决方案非常简单明了,但我在网上找不到任何有关如何解决此问题的线索。
我已经制作了解析StaticFileOptions
的 function 并且这些选项似乎已经具有现成的复合文件提供程序(在我的情况下是物理和嵌入式文件提供程序):
private IFileProvider GetFileProvider(IServiceProvider serviceProvider)
{
var staticFileOptions = serviceProvider.GetService<IOptions<StaticFileOptions>>();
var staticFileProvider = staticFileOptions.Value.FileProvider;
return staticFileProvider;
}
然后只需将此 function 注册到服务集合:
services.AddSingleton(GetFileProvider);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.