简体   繁体   English

.net core控制台应用程序强类型配置

[英].net core Console application strongly typed Configuration

On an .NET Core Console app, I'm trying to map settings from a custom appsettings.json file into a custom configuration class. 在.NET Core Console应用程序上,我正在尝试将自定义appsettings.json文件中的设置映射到自定义配置类。

I've looked at several resources online but was not able to get the .Bind extension method work (i think it works on asp.net apps or previous version of .Net Core as most of the examples show that). 我在线查看了几个资源,但无法使.Bind扩展方法有效(我认为它适用于asp.net应用程序或以前版本的.Net Core,因为大多数示例都表明了这一点)。

Here is the code: 这是代码:

 static void Main(string[] args)
    {

        var builder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

        IConfigurationRoot configuration = builder.Build();

        //this is a custom configuration object
        Configuration settings = new Configuration();

        //Bind the result of GetSection to the Configuration object
        //unable to use .Bind extension
        configuration.GetSection("MySection");//.Bind(settings);

        //I can map each item from MySection manually like this
        settings.APIBaseUrl = configuration.GetSection("MySection")["APIBaseUrl"];

        //what I wish to accomplish is to map the section to my Configuration object
        //But this gives me the error:
        //IConfigurationSection does not contain the definition for Bind
        //is there any work around for this for Console apps
        //or do i have to map each item manually?
        settings = configuration.GetSection("MySection").Bind(settings);

        //I'm able to get the result when calling individual keys
        Console.WriteLine($"Key1 = {configuration["MySection:Key1"]}");

        Console.WriteLine("Hello World!");
    }

Is there any approach to auto map the results from GetSection("MySection") to a custom object? 是否有任何方法可以将GetSection(“MySection”)的结果自动映射到自定义对象? This is for Console Application running on .NET Core 1.1 这适用于在.NET Core 1.1上运行的控制台应用程序

Thanks! 谢谢!

您需要添加NuGet包Microsoft.Extensions.Configuration.Binder以使其在控制台应用程序中工作。

I had to implement this recently so thought I'd add a whole working solution: 我最近必须实现这个,所以我想添加一个完整的工作解决方案:

Ensure the following Nuget packages are installed: 确保安装了以下Nuget包:

  • Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.Json Microsoft.Extensions.Configuration.Json
  • Microsoft.Extensions.Configuration.Binder Microsoft.Extensions.Configuration.Binder

Add a json file and define some settings: 添加json文件并定义一些设置:

AppSettings.json AppSettings.json

{
  "Settings": {
    "ExampleString": "StringSetting",
    "Number" :  1
  }
}

Bind this configuration to an object within a console app 将此配置绑定到控制台应用程序中的对象

public class Program
{
    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("AppSettings.json");

        var config = builder.Build();

        var appConfig = config.GetSection("Settings").Get<AppSettings>();

        Console.WriteLine(appConfig.ExampleString);
        Console.WriteLine(appConfig.Number);
    }
}

public class AppSettings
{
    public string ExampleString { get; set; }
    public int Number { get; set; }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM