我正在将MVC 5应用程序转换为Core 2,并对设置感到困惑。
我有一个连接到API服务器的服务; API服务器地址存储在 AppSettings.json 配置文件中,因为它有开发和生产版本。
"EtimeSettings": {
"Api_Server": "123.123.123.123"
}
阅读了一些博客后,我将以下代码添加到 startup.cs ConfigureServices
中:
services.AddMvc();
var eTimeSettings = new EtimeSettingsModel();
Configuration.Bind("EtimeSettings", eTimeSettings);
services.AddSingleton(eTimeSettings);
我无法弄清楚如何在我的API服务中检索这些值。
我虽然能够使用以下代码检索值;
public string GetApiServer()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
EtimeSettingsModel et = new EtimeSettingsModel();
IConfiguration Configuration = builder.Build();
Configuration.GetSection("EtimeSettings").Bind(et);
var apiServer = Configuration["EtimeSettings:Api_Server"];
return apiServer;
}
但我真的不相信这是最好的方式。
我错过了什么?
答案 0 :(得分:2)
引用Options pattern in ASP.NET Core Documentation
假设
public class EtimeSettingsModel {
public string Api_Server { get; set; }
}
要设置
IOptions<TOptions>
服务,请拨打AddOptions
在ConfigureServices
方法启动期间的扩展方法。 您可以使用Configure<TOptions>
扩展方法配置选项。 您可以使用委托或绑定选项来配置选项 配置:
public void ConfigureServices(IServiceCollection services) {
//...
// Setup options with DI
services.AddOptions();
// Configure EtimeSettingsModel using config by installing
// Microsoft.Extensions.Options.ConfigurationExtensions
// Bind options using a sub-section of the appsettings.json file.
services.Configure<EtimeSettingsModel>(Configuration.GetSection("EtimeSettings"));
services.AddMvc();
//...
}
可以使用选项将选项注入您的应用程序
IOptions<TOptions>
访问者服务。
private readonly EtimeSettingsModel eTimeSettings;
public MyAPIService(IOptions<EtimeSettingsModel> eTimeSettings) {
this.eTimeSettings = eTimeSettings.Value;
}