当前位置: 首页 > news >正文

.NET10中通过appsettings.json配置文件获取信息的几个方法

 

 1 {
 2   "AppSettings": {
 3     "Name": "配置系统实战应用",
 4     "Version": "1.0.0",
 5     "MaxItems": 100
 6   },
 7   "ConnectionStrings": {
 8     "DefaultConnection": "Server=localhost;Database=SampleDb;Trusted_Connection=True;"
 9   }
10 }

方法1 基于Host.CreateApplicationBuilder

1  using Microsoft.Extensions.Hosting;
2  var builder = Host.CreateApplicationBuilder(args);
3  var env = builder.Environment;
4  Console.WriteLine($"当前环境: {env.EnvironmentName}");
5  Console.WriteLine($"输出Name:{builder.Configuration["AppSettings:Name"]}");

这个用法简单,直接支持命令行传参  dotnet run --environment Production,暂时不知道如何绑定到强类型类。

方法2 基于ConfigurationBuilder

1 var config = new ConfigurationBuilder()
2     .SetBasePath(Directory.GetCurrentDirectory())
3     .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
4     .Build();
5 
6 Console.WriteLine($"AppSettings.Name:{config["AppSettings:Name"]}");
7 Console.WriteLine($"AppSettings.Name1:{config["AppSettings:Name1"]}");

方法3 添加配置到Service容器,让后续可以通过DI注入到类中使用

AppSettings.cs文件中

 

 1     internal class AppSettingsService
 2     {
 3         private readonly AppSettings _options;
 4         public AppSettingsService(IOptions<AppSettings> options) { 
 5         _options = options.Value;
 6         }
 7         public void Show()
 8         {
 9             Console.WriteLine($"AppSettings.Name:{_options.Name}");
10             Console.WriteLine($"AppSettings.Version:{_options.Version}");
11             Console.WriteLine($"AppSettings.MaxItems:{_options.MaxItems}");
12         }
13     }

 

    internal class AppSettings{[Required(ErrorMessage ="Name值不能为空!")]public string Name { get; set; }public string Version { get; set; }public int MaxItems { get; set; }}

 这里的serviceCollection.Configure如果要正常使用需要安装包Microsoft.Extensions.Options.ConfigurationExtension

 1 var serviceCollection = new ServiceCollection();
 2 serviceCollection.Configure<AppSettings>(options =>
 3 {
 4     config.GetSection("AppSettings")
 5     .Bind(options);
 6 });
 7 serviceCollection.AddSingleton<AppSettingsService>();
 8 var serviceProvider = serviceCollection.BuildServiceProvider();
 9 
10 try
11 {
12     var s = serviceProvider.GetService<AppSettingsService>();
13     s.Show();
14 }
15 catch (Exception e)
16 {
17     Console.WriteLine(e.Message);
18 }

 方法4 AddOptions并增加数据验证

1 serviceCollection.AddOptions<AppSettings>()
2     .Bind(config.GetSection("AppSettings"))
3     //这一步需要引入Microsoft.Extensions.Options.DataAnnotations包才能正常使用
4     .ValidateDataAnnotations()
5     .ValidateOnStart();

方法5 AddOptionsWithValidateOnStart并增加数据验证

1 serviceCollection
2     .AddOptionsWithValidateOnStart<AppSettings>()
3     .Bind(config.GetSection("AppSettings"))
4     //这一步需要引入Microsoft.Extensions.Options.DataAnnotations包才能正常使用
5     .ValidateDataAnnotations();
 1 <Project Sdk="Microsoft.NET.Sdk">
 2 
 3   <PropertyGroup>
 4     <OutputType>Exe</OutputType>
 5     <TargetFramework>net10.0</TargetFramework>
 6     <ImplicitUsings>enable</ImplicitUsings>
 7     <Nullable>enable</Nullable>
 8   </PropertyGroup>
 9 
10   <ItemGroup>
11     <PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.5" />
12     <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.5" />
13     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.5" />
14     <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.5" />
15     <PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.5" />
16     <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.5" />
17     <PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="10.0.5" />
18   </ItemGroup>
19 
20   <ItemGroup>
21     <None Update="appsettings.Production.json">
22       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
23     </None>
24     <None Update="appsettings.json">
25       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
26     </None>
27   </ItemGroup>
28 
29 </Project>

如果有代码报错,看看是否缺少引用,比如说引入Json文件需要

Microsoft.Extensions.Configuration.Json,前面也有部分备注,多调试。
http://www.jsqmd.com/news/507071/

相关文章:

  • 成都石灰厂靠谱推荐,有哪些值得考虑? - 工业推荐榜
  • 文墨共鸣实际作品:政务文书语义比对系统生成的朱砂印评分报告
  • 千问图像生成16Bit惊艳效果:浮空城堡史诗景观与体积雾动态光照生成实录
  • 2026别错过!论文写作全流程必备 —— 千笔·专业降AI率智能体
  • 2026苏州全托集训营平台大揭秘,师资好的分析来啦,目前做得好的全托集训营企业优质品牌选购指南 - 品牌推荐师
  • 19 Policy and Level
  • 智慧工地墙面识别 建筑物柱体识别 建筑物墙面数据集 建筑结构智能识别与测绘识别 施工场景空间分析数据集 工程进度数据集 yolo数据集第10583期
  • 2026更新版!8个降AI率工具评测:全行业通用,帮你轻松过关
  • CLIP ViT-H-14开源镜像部署一文详解:从Dockerfile构建到K8s服务编排
  • XGMII接口信号解析:如何正确理解TXC和RXC控制信号(附实战案例)
  • MiniCPM-o-4.5-nvidia-FlagOS算力优化案例:多卡并行下图文推理吞吐量翻倍
  • 5分钟搞定:用阿里云DataV快速获取全国行政区GeoJSON数据(附QGIS可视化技巧)
  • 看完就会:开源免费的降AIGC软件,千笔·专业降AIGC智能体 VS 万方智搜AI
  • Qwen3.5-9B多模态推理部署教程:统一架构+GPU加速实操
  • Qwen3-TTS-12Hz-1.7B-Base声音克隆入门必看:上传录音+文本生成全流程
  • 智慧铁路巡检数据集 有缺陷的鱼尾板识别 铁路紧固件缺失数据集 紧固件数据集 铁路轨道安全智能巡检 YOLO扣件与鱼尾板缺陷自动识别 数据集第10580期
  • 教程】FPGA实现CIC抽值滤波器的Verilog仿真与Matlab Simulink仿真,配...
  • 京东e卡快速回收技巧 - 团团收购物卡回收
  • 导入 YOLO(ultralytics)库,导致 cv2.imread(IMREAD_GRAYSCALE) 读取灰度图像时返回三维数组
  • 2026年全国人工模拟降雨厂家榜单 适配科研工程多场景 提供可落地方案 - 深度智识库
  • Sigrity XtractIM实战:5分钟搞定IC封装的IBIS模型生成(附避坑指南)
  • Cogito-v1-preview-llama-3B入门指南:模型量化(GGUF)部署全流程
  • 小白也能玩转AI绘画:造相-Z-Image文生图引擎RTX 4090快速入门
  • 避坑指南:Kettle8.2流查询组件内存溢出问题排查与性能优化
  • 2026年热门的红斑马家具生产厂推荐,长城家具服务全国 - mypinpai
  • 2026年深圳水贝婚戒定制怎么选?培育钻、结婚对戒、备婚珠宝选购指南 - 海棠依旧大
  • 好用的铝扣板有哪些,铝扣板老牌厂家怎么选择? - 工业品牌热点
  • 别再硬算矩阵了!用Python的NumPy库5分钟搞定机器人轨迹规划(三次多项式)
  • 工业互联网(二):边缘计算
  • 国产注射泵哪家好?高口碑品牌厂家推荐 - 品牌推荐大师