Ema*_*aro 7 c# dependency-injection appsettings .net-core asp.net-core-webapi
我有一个 .NET Core WebApi 项目。为了以简单的方式读取应用设置,我配置了要注入 DI 的选项。这工作正常。但是,如果我尝试Configure<>()
使用泛型类型参数进行调用,则会出现错误。
参数 2:无法从“Microsoft.Extensions.Configuration.IConfigurationSection”转换为“System.Action”
除了方法重载Configure<T>(Action<T> configureOptions)
似乎不再可用。
为什么调用不适用于泛型类型参数?
启动文件
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
// services.AddMvc() etc...
services.AddOptions();
// Works fine
services.Configure<MyOption>(Configuration.GetSection(nameof(MyOption)));
}
private void AddOption<T>(IServiceCollection services)
{
// Wont work
services.Configure<T>(Configuration.GetSection(nameof(T)));
services.Configure<T>(Configuration.GetSection(""));
}
}
Run Code Online (Sandbox Code Playgroud)
MyOption.cs
public class MyOption
{
public bool MyProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
appsettings.json
{
"MyOption": {
"MyProp": true
}
}
Run Code Online (Sandbox Code Playgroud)
你需要AddOption
像这样改变你的功能:
private void AddOption<T>(IServiceCollection services) where T : class
{
services.Configure<T>(Configuration.GetSection(typeof(T).Name));
}
Run Code Online (Sandbox Code Playgroud)
where T : class
你在方法声明中忘记了
之后你可以像这样使用这个方法:
AddOption<MyOption>(services);
Run Code Online (Sandbox Code Playgroud)
您需要使用 services.Configure 如下:
services.Configure<MyOption>(setting =>
{
Configuration.GetSection("MyOption").Bind(setting);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5083 次 |
最近记录: |