.NET Core 配置管理
命令行配置
新建一个控制台程序:
安装NuGet包:
控制台程序代码:
static void Main(string[] args)
{
var settings = new Dictionary<string, string> {
{ "name","zhangsan"},
{ "age","20"}
};
var builder = new ConfigurationBuilder()
.AddInMemoryCollection(settings)
.AddCommandLine(args);
var configuration = builder.Build();
Console.WriteLine($"name:{configuration["name"]}");
Console.WriteLine($"age:{configuration["age"]}");
}
在命令行中运行命令:
最后一行命令参数name,age对应程序中的参数,进行输出
Json配置
新增json文件:class.json,并设置shuchudaon输出到编译目录:
json内容:
控制台中代码:
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.AddJsonFile("class.json");
var configuration = builder.Build();
Console.WriteLine($"ClassNo:{configuration["ClassNo"]}");
Console.WriteLine($"ClassDesc:{configuration["ClassDesc"]}");
Console.WriteLine("Studdents:");
Console.Write(configuration["Students:0:name"]);
Console.WriteLine(configuration["Students:0:age"]);
Console.Write(configuration["Students:1:name"]);
Console.WriteLine(configuration["Students:1:age"]);
Console.Write(configuration["Students:2:name"]);
Console.WriteLine(configuration["Students:2:age"]);
Console.ReadLine();
}
运行效果:
Bind读取C#实例
新建一个.net core mvc项目吗,添加一个json文件,命名为:appsettings.json,json
内容同上class.json
,新建类:Student
,Class
,如下:
Class.cs内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace OptionBindSample
{
public class Class
{
public int ClassNo { get; set; }
public string ClassDesc { get; set; }
public List<Student> Students { get; set; }
}
public class Student
{
public string Name { get; set; }
public string Age { get; set; }
}
}
Starup.cs中代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace OptionBindSample
{
public class Startup
{
public IConfiguration Configuration { get; set; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
var myClass = new Class();
Configuration.Bind(myClass);
await context.Response.WriteAsync($"ClassNo:{myClass.ClassNo}");
await context.Response.WriteAsync($"ClassDesc:{myClass.ClassDesc}");
await context.Response.WriteAsync($"StudentCount:{myClass.Students.Count}");
});
}
}
}
运行效果:
在.net core mvc中使用Options
新建控制器和视图文件夹:
Startup.cs中的配置:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//mvc中使用如下:使用默认路由
app.UseMvcWithDefaultRoute();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
HomeController.cs中的依赖注入:
public readonly Class _myClass;
public HomeController(IOptions<Class> classAccesser)
{
_myClass = classAccesser.Value;
}
也可以不卸载控制器中,在视图中编写:
@using Microsoft.Extensions.Options;
@inject IOptions<OptionBindSample.Class> ClassAccesser
配置的热更新
视图中修改IOptions
为 IOptionsSnapshot
:
@inject IOptionsSnapshot<OptionBindSample.Class> ClassAccesser