管理ASP.net Core 2中的设置

时间:2018-03-15 11:52:16

标签: c# asp.net-core asp.net-core-mvc asp.net-core-2.0

我正在将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);

Image of Settings

我无法弄清楚如何在我的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;
}

但我真的不相信这是最好的方式。

我错过了什么?

1 个答案:

答案 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;
}