ServiceProvider 无法解析配置方法中的选项

LP1*_*P13 4 coreclr asp.net-core

我有asp.net 核心应用程序。我已经Options存储在 appsettings.json 文件中。我注册了Options服务,然后尝试在 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);
    }

}
Run Code Online (Sandbox Code Playgroud)

xne*_*neg 9

那是因为services.Configure<T>(...)您注册的不是确切的T而是IOptions<T>. 所以你有两种方法。要么注册确切的 T 像

services.AddScoped(provider => provider.GetRequiredService<IOptions<T>>().Value);
Run Code Online (Sandbox Code Playgroud)

T通过 IOptions:

var options = services.GetService<IOptions<HstsOptions>>().Value;
Run Code Online (Sandbox Code Playgroud)