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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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所有的功能!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:DotNetCore跨平台~在appsettings.json里自定义配置项,如需转载请自行联系原博主。

时间: 2024-07-31 16:40:43

DotNetCore跨平台~在appsettings.json里自定义配置项的相关文章

DotNetCore跨平台~关于appsettings.json里各种配置项的读取

对于dotnet Core来说,依赖注入的集成无疑是最大的亮点,它主要用在服务注册与注入和配置文件注册与注入上面,我们一般会在程序入口先注册服务或者文件,然后在需要的地方使用注入即可,下面主要介绍一下实体配置和集合配置的方式. 看一下配置文件代码段 "JobConfig": [ { "JobTypeDll": "TaskServicePool", "JobTypeFullName": "TaskServicePool

DotNetCore跨平台~文章索引~永久更新

本索引目录主要包括仓储大叔对dotnet core架构的研究与知识积累,从2016年开始进行撰写,到今天已经有一年多了,其中有一些小知识,小技巧,小应用,希望给大家在开发时一些启发,也希望dotnet core越来越好,希望2.0正式版快点出来! 我们的框架应该是基于组件化的! 我们的系统应该是基于微服务化的! 我们的部署,应该是基于自动化的! DotNetCore跨平台目录 DotNetCore跨平台~Startup类的介绍(2016-05-31 16:25) Linux~centos上安装.

DotNetCore跨平台~一起聊聊Microsoft.Extensions.DependencyInjection

写这篇文章的心情:激动 Microsoft.Extensions.DependencyInjection在github上同样是开源的,它在dotnetcore里被广泛的使用,比起之前的autofac,unity来说,它可以说是个包裹,或者叫适配器,它自己提供了默认的DI实现,同时也支持第三方的IOC容器,在这段时间里使用了它,就想,这东西为什么被在dotnetcore里大放异彩?为什么会全程使用它?从程序的开始到程序启动起来,你可以发现它无处不在,在框架里是这样,在业务层同时也是这样. 聊聊Mi

DotNetCore跨平台~linux上还原自主nuget包需要注意的问题

问题的产生的背景 由于我们使用了jenkins进行部署(jenkins~集群分发功能和职责处理),而对于.net core项目来说又是跨平台的,所以对它的项目拉取,包的还原,项目的编译和项目的发布都是在一台linux的jenkins节点上进行的,而我们开发时是在windows系统,所以在进行还原和编译时出现了一些问题,今天的文章主要是解决这些问题的. .net frameworks时代 我们在.net时代有包管理工具nuget,并且已经知道了它的好处,类似于nodejs的npm,帮助我们管理项目

DotNetCore跨平台~发布脚本PowerShell的设计

这几天对PS情有独忠,被它的强大功能所希引,它可以快速部署,快速发布,将一些连带的动作一次的完成,挺方便,类似于早期的bat文件,也像linux平台的bash脚本,但功能上,比前两者都要强很多,下面我们看一下将某个解决方案下的所有项目一次publish的过程,我们使用ps脚本来实现的. # 作者:仓储大叔 # 功能:发布项目到指定的地方 Param([string] $rootPath) $scriptPath = Split-Path $script:MyInvocation.MyComman

DotNetCore跨平台~Startup类的介绍

新宠儿 DotNetCore是.net5.0版本,之所以不叫.net5.0为的就是不让我们把它与前面的.net混为一淡,它将是真正意义的跨平台开发语言,在网上也有相关介绍,中国的一些大牛也发了相关文章,像张善友大牛也发了几个文章,来介绍.NetCore,这段时间,大叔将会一步一步说说这个跨平台的新宠儿! 重新起名了 ASP.NET 5 –> ASP.NET Core 1.0 .NET Core 5 –> .NET Core 1.0 Entity Framework 7 –> Entity

DotNetCore跨平台~EFCore连接Mysql的方式

在.net frameworks的ef里连接mysql我们已经测试通过了,而在dotnet core里的efCore上去连接mysql我们需要测试一下,并且在测试过程中出现了一些问题,当然最后也是解决了,下面总结一下,分享给大家! mysql项目的依赖包 数据上下文和连接串 数据仓储 添加模块扩展 业务层注入 业务实现 mysql项目的依赖包 Microsoft.EntityFrameworkCore MySql.Data.EntityFrameworkCore 数据上下文和连接串 对于mysq

DotNetCore跨平台~服务总线_事件总线的重新设计

理论闲话 之前在.netFramework平台用的好好的,可升级到.net core平台之后,由于不再需要二进制序列化,导致咱们的事件机制遇到了问题,之前大叔的事件一直是将处理程序序列化后进行存储的,处理存储的参数为事件源,一个事件源可以由多个处理程序订阅,当事件源被发布时,这些被序列化的代码段会被回调执行,这是大叔之前的思路,在RedisBus和MemoryBus里已经得到了实现,读过大叔源代码的同学应该有所了解了. 事件源和处理程序 /// <summary> /// 事件源 /// &l

DotNetCore跨平台~问题~NETCoreAPP, Version=v1.0&#039; compatible with one of the target runtimes: &#039;win10-x64

新建console项目之后,编译程序出现以下错误: Can not find runtime target for framework '.NETCoreAPP, Version=v1.0' compatible with one of the target runtimes: 'win10-x64, win81-x64, win8-x64, win7-x64'. Possible causes:        The project has not been restored or resto