ServiceProvider cannot resolve options in configure method
我有asp.net核心应用程序。 我将
但是,服务提供商无法解析Configure方法中的选项。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class Startup { public void ConfigureServices(IServiceCollection services) { services.Configure<HstsOptions>(Configuration.GetSection("HstsOptions")); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime appLifetime,IServiceProvider services) { var options = services.GetService<HstsOptions>(); // service provider cannot resolve options here, it returns null app.UseHsts(options); } } |
这是因为在
因此,您有两种方法。 要么注册确切的T喜欢
1 | services.AddScoped(provider => provider.GetRequiredService<IOptions< T >>().Value); |
或通过IOptions获得
1 | var options = services.GetService<IOptions<HstsOptions>>().Value; |
您可以更改Configure的方法签名,并将以前注册的任何内容注入该方法,如下所示:
1 2 3 4 5 6 7 8 9 | public void Configure( IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime appLifetime, IOptions<HstsOptions> hstsOptions) { app.UseHsts(hstsOptions.Value); } |
请注意,当您使用services.Configure时,您实际上是在注册要注册的东西的IOptions,并使用该东西的.Value属性来获得该东西。