美文网首页.NET
Asp.net core 配置文件

Asp.net core 配置文件

作者: 凌雲木 | 来源:发表于2018-01-17 22:53 被阅读894次

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; }
    }

相关文章

网友评论

    本文标题:Asp.net core 配置文件

    本文链接:https://www.haomeiwen.com/subject/creuoxtx.html