zoukankan      html  css  js  c++  java
  • 十二个 ASP.NET Core 例子——配置操作

      目录:

    1. 简单配置(利用configration 键值读取)
    2. 使用选项和配置对象(自定义类绑定配置文件实现读取)
    3. IOptionsSnapshot(配置文件更改时也变化)
    4. 内存数据放到配置对象中
    5. 实体框架自定义配置
    6. CommandLine配置(利用命令行配置)

         注:这是院子里面大神提供的例子。传送门


      1.简单配置(利用configration 键值读取)

      注意点多级节点用“:”冒号

            public static IConfigurationRoot Configuration { get; set; }//吐槽没有开放出来。每次都要new
    
            public HomeController()
            {
                var builder = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json");
                Configuration = builder.Build();
                var value = Configuration["option1"];//一级节点
                var value2 = Configuration["Logging:IncludeScopes"];//二级节点
                var value3 = Configuration["Logging:LogLevel:Default"];//三级节点
                var value4 = Configuration["Patients:1:Name"];//数据情况下,去第二个元素的第一节点
            }
    View Code

      appsettings.json 文件

    {
      "ConnectionStrings": {
        "DefaultConnection": "Server=(localdb)\mssqllocaldb;Database=aspnet-AspNetCoreAuthIdentity-c52f1669-ef35-4a6f-af80-47f83d0b7b98;Trusted_Connection=True;MultipleActiveResultSets=true"
      },
      "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
          "Default": "Warning"
        }
      },
      "option1": "value1_from_json",
      "option2": 2,
      "Patients": [
        {
          "Name": "Gandalf",
          "Age": "1000"
        },
        {
          "Name": "Harry",
          "Age": "17"
        }
      ]
    }
    View Code

        2.使用选项和配置对象(自定义类绑定配置文件实现读取)

      创建自己的类。

        public class MyOptions
        {
            public MyOptions()
            {
                // Set default value.
                Option1 = "value1_from_ctor";
            }
            public string Option1 { get; set; }
            public int Option2 { get; set; } = 5;
        }
    View Code

        项目启动时注入到配置中Services.Configure

            public void ConfigureServices(IServiceCollection services)
            {
                // Add framework services.
                services.AddDbContext<ApplicationDbContext>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    
                services.AddIdentity<ApplicationUser, IdentityRole>()
                    .AddEntityFrameworkStores<ApplicationDbContext>()
                    .AddDefaultTokenProviders();
    
                services.AddMvc();
    
                // Add application services.
                services.AddTransient<IEmailSender, AuthMessageSender>();
                services.AddTransient<ISmsSender, AuthMessageSender>();
    
                // Register the IConfiguration instance which MyOptions binds against.
                services.Configure<MyOptions>(Configuration);
            }
    View Code

      获取值

            private readonly MyOptions _options;
    
            public HomeController(IOptions<MyOptions> options)
            {
                _options = options.Value;
            }
    View Code

     appsetting.json不用和类的字段完全一致,只要包含就可以了

      3.IOptionsSnapshot(配置文件更改时也变化)

            private readonly MyOptions _options;
    
            public HomeController(IOptionsSnapshot<MyOptions> options)
            {
                _options = options.Value;
            }
    View Code

    IOptionsSnapshot的作用:在配置文件修改的时候,配置数据也会变化。(刷新页面)

     4.内存数据放到配置对象中(AddInMemoryCollection)

            public static IConfigurationRoot Configuration { get; set; }
            public HomeController()
            {
                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();
                var vlaue = Configuration["Profile:MachineName"];
            }
    View Code

    顾名思义,不用去配置文件中读取,可以直接把内存中的数据放到配置对象中。【感觉有点没必要,既然在内存中,为什么不直接用】

    这里还讲了一个GetValue<T>;作用:确定配置的值类型,设置默认值。用法:Configuration.GetValue<int>("App:MainWindow:Left", 80);

     5.实体框架自定义配置(AddEntityFrameworkConfig)

    利用EF读取数据库读取数据和写入数据。 类似利用EF 对数据库数据操作。

    1.创建实体类 2.创建DbContext 3.创建自定义配置提供程序EFConfigProvider,4.创建资源给Provider,5.AddEntityFrameworkConfig 6.读取

    代码较多操作较多就不贴了。。

     6.CommandLine配置(AddCommandLine)命令行配置

    先添加引用“Microsoft.Extensions.Configuration.CommandLine”

    控制台类型下,添加命令行参数

            public static IConfigurationRoot Configuration { get; set; }
    
            public static Dictionary<string, string> GetSwitchMappings(
                IReadOnlyDictionary<string, string> configurationStrings)
            {
                return configurationStrings.Select(item =>
                        new KeyValuePair<string, string>(
                            "-" + item.Key.Substring(item.Key.LastIndexOf(':') + 1),
                            item.Key))
                    .ToDictionary(
                        item => item.Key, item => item.Value);
            }
            public static void Main(string[] args = null)
            {
                var dict = new Dictionary<string, string>
                {
                    {"Profile:MachineName", "Rick"},
                    {"App:MainWindow:Left", "11"}
                };
                var builder = new ConfigurationBuilder();
                builder.AddInMemoryCollection(dict)
                    .AddCommandLine(args, GetSwitchMappings(dict));
                Configuration = builder.Build();
                Console.WriteLine($"Hello {Configuration["Profile:MachineName"]}");
    
                // Set the default value to 80
                var left = Configuration.GetValue<int>("App:MainWindow:Left", 80);
                Console.WriteLine($"Left {left}");
                Console.ReadKey();
            }
    View Code

    注意:命令行参数有一定的格式,也可以利用GetSwitchMappings自定义格式。

  • 相关阅读:
    Max History CodeForces
    Buy a Ticket CodeForces
    AC日记——字符串的展开 openjudge 1.7 35
    AC日记——回文子串 openjudge 1.7 34
    AC日记——判断字符串是否为回文 openjudge 1.7 33
    AC日记——行程长度编码 openjudge 1.7 32
    AC日记——字符串P型编码 openjudge 1.7 31
    AC日记——字符环 openjudge 1.7 30
    AC日记——ISBN号码 openjudge 1.7 29
    AC日记——单词倒排 1.7 28
  • 原文地址:https://www.cnblogs.com/TeemoHQ/p/6826022.html
Copyright © 2011-2022 走看看