zoukankan      html  css  js  c++  java
  • DotNetCore跨平台~在appsettings.json里自定义配置项

    回到目录

    DotNetCore里一切都是依赖注入的,对于appsettings这个可扩展的配置对象也不例外,它位于项目根目录,一般在startup里去注册它,在类中通过构造方法注入来获取当前的对象,以便去使用它,当然我们也可以自己去构建和使用它,下面我就来总结一下。

    传统方法,startup注入,构造方法使用

    1 注意配置类

       public class RedisConfiguration
        {
            #region 属性成员
    
            /// <summary>
            /// 文件上传路径
            /// </summary>
            public string Host { get; set; }
    
            /// <summary>
            /// 允许上传的文件格式
            /// </summary>
            public string Password { get; set; }
            /// <summary>
            /// 图片上传最大值KB
            /// </summary>
            public int IsProxy { get; set; }
            #endregion
        }

    2 在appsettings里添加它的内容

    {
      "Logging": {
        "IncludeScopes": false,
        "Debug": {
          "LogLevel": {
            "Default": "Warning"
          }
        },
        "Console": {
          "LogLevel": {
            "Default": "Warning"
          }
        }
      },
    
      "RedisConfiguration": {
        "Host": "localhost:6379",
        "Password": "bobo123#",
        "IsProxy": "0"
      }
    }

    3 在控制器里使用它,当然你可以在基类中定义它的使用方式,但注入的入口还是在构造方法上

      public class ApiControllerBase : Controller
        {
            private readonly IOptions<RedisConfiguration> AppConfiguration;
            public ApiControllerBase(IOptions<RedisConfiguration> appConfiguration)
            {
                AppConfiguration = appConfiguration;
            }
       }

    这时,你的AppConfiguration在被加载后,就有值了,是在程序运行时被注入进来的!

    属性中注入并且使用

    appsetting的内容不变,只是在属性中去封装了配置注入与获取的过程,注意,为了考虑性能,你可以把它的建立和获取做成单例,这点我就不设计了!

           public RedisConfiguration AppConfigurations
            {
                get
                {
                    var config = new ConfigurationBuilder()
                                 .AddInMemoryCollection()
                                 .SetBasePath(Directory.GetCurrentDirectory())
                                 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                                 .Build();
    
                    var sp = new ServiceCollection().AddOptions().Configure<RedisConfiguration>(
                             config.GetSection("RedisConfiguration")).BuildServiceProvider();
                    var _appConfiguration = sp.GetService<IOptions<RedisConfiguration>>();
                    return _appConfiguration.Value;
                }
            }
    

     在控制器上,可以直接使用它了,我这个属性是做在所有控制器的父类上的。

            [HttpGet]
            public IEnumerable<string> Get()
            {
                return new string[] {
                    AppConfigurations.Host,
                    AppConfigurations.Password,
                    AppConfigurations.IsProxy.ToString()
                };
            }

    感谢各位的阅读!

    对于.net core的研究我们还在继续,希望core2.0,standard2.0不会让我们失望!

    听说它已经实现了.net frameworks 4.6.1所有的功能!

    回到目录

  • 相关阅读:
    bash帮助文档简单学习;bash手册翻译
    jmeter的master、slave模型启动方法
    如何查看pip安装包的所有版本;以及ipython的安装
    简单过下bash/sh脚本基本知识吧
    Celery 启动报错 can_read() got an unexpected keyword argument timeout
    paramiko执行命令超时的问题
    远程的jmeter自动执行完,如何回调通知被调用者“结束”状态
    记录一下:关于mysql数据误删除恢复的问题
    数据库Sharding的基本思想和切分策略
    数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示
  • 原文地址:https://www.cnblogs.com/lori/p/7382284.html
Copyright © 2011-2022 走看看