.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,前面也有部分备注,多调试。
posted @ 2026-03-20 14:53  uxinxin  阅读(19)  评论(0)    收藏  举报