我已经这样做了:
services.Configure<ApplicationSettings>(_configuration.GetSection("ApplicationSettings"));
Run Code Online (Sandbox Code Playgroud)
我以为这会让我注射ApplicationSettings,但显然不行。
我可以将GetSection(...)其注册为单例,但是那有什么意义呢.Configure?
msdn 文档说“注册 TOptions 将绑定的配置实例,并在配置更改时更新选项。”
不过,目前尚不清楚如何设置模式以在我的应用程序中使用配置作为 DI。
这是我试图实现的SO问题:
这正是为强类型设置部分配置依赖项注入ApplicationSettings.
public void ConfigureServices(IServiceCollection services)
{
// ...
services.Configure<ApplicationSettings>(_configuration.GetSection("ApplicationSettings"));
// You can register your service
services.AddTransient<SomeService>();
}
Run Code Online (Sandbox Code Playgroud)
然后,您实现该服务,并将设置部分自动注入其中。
public class SomeService
{
private readonly IOptions<ApplicationSettings> _options;
public SomeService(IOptions<ApplicationSettings> options)
{
_options = options;
}
public string AddPrefix(string value)
{
// AddPrefix("test value")
// will return:
// PREFIX - test value
return $"{_options.Value.Prefix} - {value}";
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于您的ApplicationSettings定义为:
public class ApplicationSettings
{
public string Prefix { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
你的appsettings.json应该看起来像:
{
"ApplicationSettings": {
"Prefix": "PREFIX"
}
}
Run Code Online (Sandbox Code Playgroud)