ASP.NET Core
中的应用程序可以使用一个或多个配置。本文主要介绍常用的配置类型,方便在项目中快速应用。将会介绍:
环境设置文件,appsettings.{Environment}.json
例如,appsettings.Production.json
和
appsettings.Development.json
。
设置文件,例如 appsettings.json
配置示例
以 appsettings.json 配置为例,定义如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { "Position" : { "Title" : "Editor" , "Name" : "Joe Smith" } , "MyKey" : "My appsettings.json Value" , "Logging" : { "LogLevel" : { "Default" : "Information" , "Microsoft" : "Warning" , "Microsoft.Hosting.Lifetime" : "Information" } } , "AllowedHosts" : "*" }
加载顺序
默认的 JsonConfigurationProvider
会按以下顺序加载配置:
appsettings.json
appsettings.{Environment}.json
例如,appsettings.Production.json
和
appsettings.Development.json
文件。 文件的环境版本是根据 IHostingEnvironment.EnvironmentName
加载的。 有关详细信息,请参阅在
ASP.NET Core 中使用多个环境 。
后加载的 appsettings.{Environment}.json
的值会覆盖掉
appsettings.json
中相同的键。
数据访问
要访问配置,使用 IConfiguration
的接口获取数据,Configuration 在 IOC
容器中注册了单例实例,只需要在使用的类中用构造函数的方式注入即可。如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 public class TestModel : PageModel { private readonly IConfiguration Configuration; public TestModel (IConfiguration configuration ) { Configuration = configuration; } public ContentResult OnGet () { var myKeyValue = Configuration["MyKey" ]; var title = Configuration["Position:Title" ]; var name = Configuration["Position:Name" ]; var defaultLogLevel = Configuration["Logging:LogLevel:Default" ]; return Content($"MyKey value: {myKeyValue} \n" + $"Title: {title} \n" + $"Name: {name} \n" + $"Default Log Level: {defaultLogLevel} " ); } }
通过路径获取数据
想发通过路径的方式来获取数据,不同层级的路径名之间使用 :
进行分隔,例如:Position:Name
。
数据绑定
定义
可以定义类来将 json 配置映射成强类型,这样方便使用。
例如有如下配置:
1 2 3 4 "Position" : { "Title" : "Editor" , "Name" : "Joe Smith" }
可以创建一个 PositionOptions
类:
1 2 3 4 5 6 7 public class PositionOptions { public const string Position = "Position" ; public string Title { get ; set ; } = String.Empty; public string Name { get ; set ; } = String.Empty; }
条件
选项类要求:
必须是包含公共无参数构造函数的非抽象类。
类型的所有公共读写属性都已绑定。
字段不是绑定的。 在上面的代码中,Position
未绑定。
由于使用了 Position
字段,因此在将类绑定到配置提供程序时,不需要在应用中对字符串
"Position"
进行硬编码。
使用时绑定
下面的示例代码将:
调用 ConfigurationBinder.Bind
将类绑定到 Position
部分。
显示 Position
配置数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public class Test22Model : PageModel { private readonly IConfiguration Configuration; public Test22Model (IConfiguration configuration ) { Configuration = configuration; } public ContentResult OnGet () { var positionOptions = new PositionOptions(); Configuration.GetSection(PositionOptions.Position).Bind(positionOptions); return Content($"Title: {positionOptions.Title} \n" + $"Name: {positionOptions.Name} " ); } public ContentResult OnGet2 () { positionOptions = Configuration.GetSection(PositionOptions.Position) .Get<PositionOptions>(); return Content($"Title: {positionOptions.Title} \n" + $"Name: {positionOptions.Name} " ); } }
IOC 绑定
1 2 3 4 5 6 7 var builder = WebApplication.CreateBuilder(args);builder.Services.AddRazorPages(); builder.Services.Configure<PositionOptions>( builder.Configuration.GetSection(PositionOptions.Position)); var app = builder.Build();
可以将配置与实体的绑定写到一个扩展方法中,从而简化 Program.cs
中的代码
使用
通过 IOptions<T>
来通过 IOC
自动获取注册的实例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class Test2Model : PageModel { private readonly PositionOptions _options; public Test2Model (IOptions<PositionOptions> options ) { _options = options.Value; } public ContentResult OnGet () { return Content($"Title: {_options.Title} \n" + $"Name: {_options.Name} " ); } }
参考
ASP.NET
Core 中的配置
ASP.NET
Core 中的选项模式