我们如何在新的asp.net vnext中存储配置数据?

时间:2015-01-30 08:59:47

标签: asp.net-core

我们如何在新的asp.net vnext中存储配置数据? web.config仍然存在(system.web已删除,因此没有任何web.config,但我喜欢它)或使用新的json文件来获取配置数据。

3 个答案:

答案 0 :(得分:5)

最佳配置是强类型选项的起点。因此,您在启动时要做的是注册一个Options对象,使用从配置中读取的数据进行设置,然后在其余代码中从DI系统获取它。

示例:

创建一个Options对象

public class ApplicationOptions
{
    public bool MyOption { get; set; }
}

阅读配置并设置选项对象,然后在DI

中注册
public void Configure(IApplicationBuilder app)
{         
    // rest of setup

    var applicationOptions = new ApplicationOptions();
    string myOption;
    if (configuration.TryGet("MyOption", out myOption) &&
            myOption.Equals("True", StringComparison.OrdinalIgnoreCase))
    {
        applicationOptions.MyOption = true;
    }

    // For the scenario above also the code below will work.
    // It is currently limited to desktop (ASPNET50, NET45) only.
    // services.Configure<ApplicationOptions>(configuration);

    services.AddInstance<ApplicationOptions>(applicationOptions);

    // more setup
}

并在您的代码中解决它

public class MyController : Controller
{
    public IActionResult Index(ApplicationOptions options)
    {
        // do something with the options
    }
}

编辑:使用任何实用的可重用选项对象,设置它的代码可能会在启动类之外发生。

答案 1 :(得分:5)

在重大更改(测试版6)中,Microsoft.Framework.ConfigurationModel程序集名称已更改为Microsoft.Framework.Configuration 这是修改后的启动类

 public IConfiguration Configuration { get; set; }

public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
     var configurationBuilder = new ConfigurationBuilder(appEnv.ApplicationBasePath).
        .AddJsonFile("config.json")
        .AddEnvironmentVariables();
     Configuration = configurationBuilder.Build();
}

答案 2 :(得分:2)

不确定您要存储的数据类型,但这对我有用。我创建了这个文件myconfig.json并以JSON格式存储了我需要的数据。

这将注册您的配置文件,我在startup.cs页面中添加了此代码。

Configuration = new Configuration()
.AddJsonFile("config.json")
.AddJsonFile("myconfig.json")
.AddEnvironmentVariables();

要从您的JSON文件中获取所需的数据,您需要在代码的任何位置使用此数据。

IConfiguration Configuration = new Configuration().AddJsonFile("myconfig.json");
var jsonNodes = Configuration.Get("SomeJsonNode");
string someJsonString = Configuration.Get("someJsonString");

仅供参考:在我测试代码时,json数组不受支持。不确定他们现在是否已修复。