我有asp.net核心应用程序。我在appsettings.json文件中存储了Options
。我在服务中注册Options
,然后尝试在Configure方法中解决它。
但服务提供商无法解决Configure方法中的选项。
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);
}
}
答案 0 :(得分:2)
您可以更改Configure的方法签名,并将先前注册的任何内容注入到方法中,如下所示:
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory,
IApplicationLifetime appLifetime,
IOptions<HstsOptions> hstsOptions)
{
app.UseHsts(hstsOptions.Value);
}
请注意,当您使用services.Configure时,您实际上正在注册您正在注册的事物的IOptions,并获得您使用该事件的.Value属性
答案 1 :(得分:1)
这是因为使用services.Configure<T>(...)
时,您注册的不是完全T
,而是IOptions<T>
。
因此,您有两种方法。要么注册精确的T像
services.AddScoped(provider => provider.GetRequiredService<IOptions<T>>().Value);
或通过IOptions获得T
:
var options = services.GetService<IOptions<HstsOptions>>().Value;