前面的文章都是介绍AgileConfig服务端已经控制台是如何工作、如何使用的,其实AgileConfig还有一个重要的组成部分:AgileConfig.Client。
AgileConfig.Client是使用C#编写的一个类库,只有使用它才能跟AgileConfig的服务端配合工作实现实时推送配置信息等功能。
最近有几个同学问我如何集成Client,如何使用Client,看来光是Readme上的示例还是不够的,有必要比较详细的介绍下如何使用AgileConfig.Client。
下面通过几个示例来演示下如何AgileConfig.Client如何在mvc,控制台,wpf等程序上来读取配置:

asp.net core mvc下读取配置

mvc项目应该是目前使用最广泛的项目,同样它与AgileConfig.Client的集成最深入。下面来看看如何在mvc项目下使用AgileConfig.Client。

安装AgileConfig.Client

Install-Package AgileConfig.Client

当然第一步是使用nuget命令安装最新版的Client库。

修改appsettings.json

  "AgileConfig": {"appId": "test_app","secret": "","nodes": "http://agileconfig.xbaby.xyz:5000"}

AgileConfig.Client连接服务端需要一点必要的信息,我们把这些信息配置在appsettings.json文件里。节点的名称叫“AgileConfig”,里面配置了:

  1. appId 应用id

  2. secret 应用密钥,没有的话留空

  3. nodes 节点地址,如果有多个则使用英文逗号(,)分隔

AddAgileConfig

修改program.cs文件:

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, config) =>{//注入AgileConfig Configuration Providerconfig.AddAgileConfig();}).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});

通过AddAgileConfig扩展方法注入AgileConfigProvider。AgileConfigProvider才是跟配置系统打交道的组件。如果你想要使用Client的实例进行读取配置,也可以手动实例化一个client然后通过AddAglieConfig的另外一个重载注入进去。

Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, config) =>{//注入AgileConfig Configuration Providervar client = new ConfigClient();config.AddAgileConfig(client);})

读取配置

通过以上的设置,其实后面的配置读取跟使用appsettings.json没什么区别了。

 public HomeController(ILogger<HomeController> logger, IConfiguration configuration, ){_logger = logger;_IConfiguration = configuration;}/// <summary>/// 使用IConfiguration读取配置/// </summary>/// <returns></returns>public IActionResult ByIConfiguration(){var userId = _IConfiguration["userId"];var dbConn = _IConfiguration["db:connection"];ViewBag.userId = userId;ViewBag.dbConn = dbConn;return View("Configuration");}

控制台下读取配置

当然了从本质上来说控制台项目跟mvc项目没啥区别。同样可以引入ConfigurationBuilder来注入ConfigClient。但是一般我们使用控制台可能是写个小工具,不用搞的这么复杂,直接new一个ConfigClient的实例是最直接的方法。

 static void Main(string[] args){Console.WriteLine("Hello World!");var appId = "test_app";var secret = "";var nodes = "http://agileconfig.xbaby.xyz:5000";//使用有参构造函数,手动传入appid等信息var client = new ConfigClient(appId, secret, nodes);Task.Run(async () =>{while (true){await Task.Delay(5000);foreach (string key in client.Data.Keys){var val = client[key];Console.WriteLine("{0} : {1}", key, val);}}});client.ConnectAsync();//如果不是mvc项目,不使用AddAgileConfig方法的话,需要手动调用ConnectAsync方法来跟服务器建立连接Console.WriteLine("Test started .");Console.Read();

需要注意的一个地方是手工new ConfigClient是需要自己调用ConnectAsync方法进行连接服务器的。

WPF程序读取配置

跟控制台程序一样,WPF同样首选直接new一个ConfigClient实例比较简单易用。

    public partial class App : Application{public static IConfigClient ConfigClient { get; private set; }private void Application_Startup(object sender, StartupEventArgs e){//跟控制台项目一样,appid等信息取决于你如何获取。你可以写死,可以从配置文件读取,可以从别的web service读取。var appId = "test_app";var secret = "";var nodes = "http://agileconfig.xbaby.xyz:5000";ConfigClient = new ConfigClient(appId, secret, nodes);ConfigClient.ConnectAsync().GetAwaiter();}}

实例化的位置可以选在App文件的Application_Startup方法内。并且把实例直接挂到App类的静态变量上。

注意:Application_Startup方法是同步方法。调用ConnectAsync之后需要调用GetAwaiter()方法等待连接成功。

在窗体程序内使用配置

 private void Window_Loaded(object sender, RoutedEventArgs e){this.tbx1.Text = App.ConfigClient["userId"];this.tbx2.Text = App.ConfigClient["connection"];}

我们通过直接访问App类上的ConfigClient对象读取配置信息。

AgileConfig.Client公共方法

下面列举下Client常用的几个公共方法

名称 说明
string this[string key] 直接通过键索引值
string Get(string key) 根据键获取值
List GetGroup(string groupName) 根据组名获取配置列表
Task ConnectAsync() 连接至服务器
bool Load() 手工从服务器拉取一次配置到客户端
void LoadConfigs(List configs) 手工把配置项加载到客户端
event Action ConfigChanged 这是一个事件,当某个配置值发生变化的时候触发

gihub地址:
AgileConfig
AgileConfig.Client
AgileConfig MVCSample
AgileConfig WPFSample
AgileConfig ConsoleSample
求星星!!!

相关文章:

造轮子-AgileConfig一个基于.NetCore开发的轻量级配置中心

AgileConfig-轻量级配置中心 1.1.0 发布,支持应用间配置继承

AgileConfig-如何使用AgileConfig.Client读取配置相关推荐

  1. YARP+AgileConfig 5分钟实现一个支持配置热更新的代理网关

    YARP 是微软开源的一个反向代理项目,英文名叫 Yet Another Reverse Proxy .所谓反向代理最有名的那就是 nginx 了,没错 YARP 也可以用来完成 nginx 的大部分 ...

  2. 无法读取配置节“oracle.manageddataaccess.client”,因为它缺少节声明

    程序发布后出现问题: 无法读取配置节"oracle.manageddataaccess.client",因为它缺少节声明 解决办法: 1.安装了odac12.  ODTwithOD ...

  3. seata-server没有从nacos配置中心读取配置_微服务新秀之Nacos,看了就会,我说的

    再讲 Nacos 之前,我们需要了解什么是 Nacos:Nacos 是阿里的一个开源产品,它是针对微服务架构中的 服务发现.配置管理.服务治理 的综合性解决方案. 官网给出的回答: Nacos 致力于 ...

  4. Spark读取配置源码剖析

    我们知道,有一些配置可以在多个地方配置.以配置executor的memory为例,有以下三种方式:1. spark-submit的--executor-memory选项2. spark-default ...

  5. .Net Core 自定义配置源从配置中心读取配置

    配置,几乎所有的应用程序都离不开它..Net Framework时代我们使用App.config.Web.config,到了.Net Core的时代我们使用appsettings.json,这些我们再 ...

  6. SpringCloud配置中心客户端读取配置

    转载自 SpringCloud配置中心客户端读取配置 微服务连接配置中心来实现外部配置的读取. 引入依赖 <dependencies><dependency><group ...

  7. Spring Cloud 配置中心客户端读取配置

    微服务连接配置中心来实现外部配置的读取. 引入依赖 <dependencies><dependency><groupId>org.springframework.c ...

  8. 第五节13读取配置中的连接字符串

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. 如何使用AWS和Azure的配置存储服务保存读取配置

    原文:Want to yank configuration values from your .NET Core apps? 作者:pauljwheeler 译文:https://www.cnblog ...

最新文章

  1. Oracle总结第二篇【视图、索引、事务、用户权限、批量操作】
  2. svchost.exe介绍
  3. hdu-1074 Doing Homework
  4. C++ namespace 命名空间
  5. linux6如何分区,CentOS6.9安装 硬盘分区方案与分区步骤
  6. gitlab与已安装nginx(tengine)冲突解决方案,使用自己安装的nginx(tengine)
  7. AP模块NOTE修改API
  8. 电话拦截以及电话拦截后的提示音
  9. github客户端教程
  10. DSPTMS320C6678的数据导入方法
  11. 第四方汇聚支付接口对接Php
  12. R语言绘制柱状图(bar plot)
  13. Unity3D Soft Mask 软遮罩插件
  14. java的基本数据类型有哪些
  15. 虚拟机VMware 安装centos、常规配置、共享文件等
  16. PHP配置环境搭建 MyEclipce添加PHP插件
  17. skyworth E900-S 安装沙发
  18. solidworks遇到错误卸载的提示的解决方法
  19. PHP发送邮件功能实现
  20. hadoop读写mysql数据库

热门文章

  1. socket编程学习笔记
  2. C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质...
  3. 在navicat中新建数据库
  4. django源码简析——后台程序入口
  5. nginx汇总(z)
  6. 交换网络中的sniffer讨论-基于交换网络的ARP spoofing sniffer
  7. ASP.NET MVC 1.0 Result 几何?
  8. java中拷贝文件的代码_拷贝文件夹中的所有文件到另外一个文件夹
  9. imessage_如何在所有Apple设备上同步您的iMessage
  10. 原生js打印指定节点元素