.NET Core 配置管理

.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,新建类:StudentClass,如下:

这里写图片描述

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

配置的热更新

视图中修改IOptionsIOptionsSnapshot

@inject IOptionsSnapshot<OptionBindSample.Class> ClassAccesser

附:

源码

猜你喜欢

转载自blog.csdn.net/zhaobw831/article/details/78935709
今日推荐