Asp.net core 的配置文件是严格的json格式
appsettings.json文件如下,看名字类型以前的Web.config 与app.config,只不过换成了json格式
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"ConnectionStrings": {
"NetCoreForWebContext": "Server=(localdb)\\mssqllocaldb;Database=NetCoreForWebContext-51bf975d-319c-466d-a2f8-1171e666074d;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"hold": {
"ceshi": "ceshi"
},
"Name": "cai niao",
"list": {
"NUM": 1,
"Age": 2
}
}
配置文件的读取都是通过一个Configuration对象来读取。具体来说,Configuration对象实际指ConfigurationRoot和ConfigurationSection两个类型。配置文件中根节点所在的Configuration对象被称为ConfigurationRoot,除此之外的其他Configuration对象则被称为ConfigurationSection,配置模型分别定义了接口IConfigurationRoot和IConfigurationSection来表示它们,这两个接口都是IConfiguration的继承者
image.png
Configuration对象是由ConfigurationBuilder创建的,
而原始的配置信息来源是通过ConfigurationSource获取的的,
所以读取配置信息时首先需要一个 ConfigurationRoot对象,所以读取过程是:先创建一个ConfigurationBuilder对象,在ConfigurationBuilder对象上添加或者注册数据源 ConfigurationSource(可以注册一个或者多个), 最后调用Buid()方法,来实现我们需要的Configuration对象的一个实例。
即:
IConfiguration config = new ConfigurationBuilder()
//注册一个或者多个ConfigurationSource对象,在此注册一个内存配置来源
.Add(
……
).Build(); //通过Buid()方法,创建 Configuration对象
image.png
注册多个配置来源
var builder = new ConfigurationBuilder();
builder.AddInMemoryCollection(dict);//内存配置源
builder.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");//注册当前路径下的配置源
控制台读取
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
Console.WriteLine($"Name = {Configuration["Name"]}");
Console.WriteLine($"hold:ceshi = {Configuration["hold:ceshi"]}");
Console.WriteLine($"ConnectionStrings:NetCoreForWebContext={Configuration["ConnectionStrings:NetCoreForWebContext"]}");
Console.WriteLine($"Logging:LogLevel:Default={Configuration["Logging:LogLevel:Default"]} ");
Console.WriteLine($"Logging:IncludeScopes={Configuration["Logging:IncludeScopes"]} ");
Console.WriteLine($"list:NUM={Configuration["list:NUM"]} ");
Console.WriteLine($"list:Age={Configuration["list:Age"]} ");
Configuration["list:Age"] = "99";//并不能更新配置文件
Console.WriteLine($"list:Age={Configuration["list:Age"]} ");
输出结果
Name = cai niao
hold:ceshi = ceshi
ConnectionStrings:NetCoreForWebContext=Server=(localdb)\mssqllocaldb;Database=NetCoreForWebContext-51bf975d-319c-466d-a2f8-1171e666074d;Trusted_Connection=True;MultipleActiveResultSets=true
Logging:LogLevel:Default=Warning
Logging:IncludeScopes=False
list:NUM=1
list:Age=2
list:Age=99
控制器中读取
Asp.net框架默认添加了IConfiguration的依赖注入
public class MoviesController : Controller
{
private readonly NetCoreForWebContext _context;
public IConfiguration Configuration { get; }
public MoviesController(NetCoreForWebContext context,IConfiguration configuration)
{
_context = context;
Configuration = configuration;
}
}
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
},
"Model": {
"Name": "aaa",
"Age": "6"
}
},
"People": {
"Name": "bbb",
"Age": "16"
}
}
var dd = Configuration.GetSection("Logging")["IncludeScopes"];
var dd1 = Configuration["Logging:Model:Name"];
int dd2 = Configuration.GetValue<int>("Logging:Model:Age");//string转int
把配置文件绑定到具体类型
采用 ConfigurationRoot类的拓展方法:
- bind()方法
public static void Bind(this IConfiguration configuration, object instance);
- Get()方法
public static T Get<T>(this IConfiguration configuration);
public class Program
{
public static IConfiguration Configuration { get; set; }
public static void Main(string[] args)
{
var dict = new Dictionary<string, string>
{
{"Profile:MachineName", "Rick"},
{"App:MainWindow:Height", "11"},
{"App:MainWindow:Width", "11"},
{"App:MainWindow:Top", "11"},
{"App:MainWindow:Left", "11"}
};
var builder = new ConfigurationBuilder();
builder.AddInMemoryCollection(dict);
Configuration = builder.Build();
Console.WriteLine($"Hello {Configuration["Profile:MachineName"]}");
var window = new MyWindow();
//绑定到 MyWindow类型
var s1 = Configuration.GetSection("App:MainWindow").Get<MyWindow>();
//绑定到 MyWindow类型
Configuration.GetSection("App:MainWindow").Bind(window);
Console.WriteLine($"Left {window.Left}");
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
public class MyWindow
{
public int Height { get; set; }
public int Width { get; set; }
public int Top { get; set; }
public int Left { get; set; }
}












网友评论