.NET Core 2控制台应用能否自动构建AppConfiguration配置模型?
在.NET Core 2控制台应用中自动构建AppConfiguration实例的方法
当然可以自动构建,但首先得修正你当前JSON配置和C#类之间的不匹配问题,不然绑定会失败。
问题点说明
你的AppConfiguration类里,ActionsSettings是Dictionary<string, ActionsSettings>类型(键值对字典),但你提供的JSON里把它写成了数组[],这两种结构不兼容,得先调整JSON格式。
步骤1:修正JSON配置
把ActionsSettings从数组改成键值对对象,同时注意ConnectionString后面多了个空格,也需要去掉(避免绑定失败):
{ "StateFilesPath": "StateFilesPath...", "ConnectionString": "BIConnectionString...", "ActionsSettings": { "Reg": { "ApiUrl": "ApiUrl...", "TableName": "TableName..." } } }
步骤2:在Main函数中绑定配置到AppConfiguration实例
.NET Core提供了ConfigurationBinder来实现自动绑定,有两种常用方式:
方式一:使用Bind方法
先实例化AppConfiguration,再调用Bind方法把配置数据填充进去:
static void Main(string[] args) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); IConfigurationRoot configuration = builder.Build(); // 初始化配置实例并绑定数据 var appConfig = new AppConfiguration(); configuration.Bind(appConfig); // 测试使用配置 Console.WriteLine($"State文件路径:{appConfig.StateFilesPath}"); Console.WriteLine($"Reg接口地址:{appConfig.ActionsSettings["Reg"].ApiUrl}"); }
方式二:使用Get<T>方法(更简洁)
直接通过Get<AppConfiguration>()获取已经绑定好的实例:
static void Main(string[] args) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); IConfigurationRoot configuration = builder.Build(); // 直接获取绑定后的配置实例 var appConfig = configuration.Get<AppConfiguration>(); // 安全地使用配置(避免空引用) if (appConfig != null && appConfig.ActionsSettings?.ContainsKey("Reg") == true) { Console.WriteLine($"Reg表名:{appConfig.ActionsSettings["Reg"].TableName}"); } }
额外注意事项
如果你的控制台应用还没安装Microsoft.Extensions.Configuration.Binder包,需要通过NuGet安装它——这是实现配置绑定的核心包,.NET Core 2控制台项目默认不会自动引用这个包。
内容的提问来源于stack exchange,提问作者SexyMF
相关产品推荐
相关产品推荐

