前面的文章都是介绍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
1. Install - Package AgileConfig . Client
当然第一步是使用nuget命令安装最新版的Client库。
修改appsettings.json
1. "AgileConfig" : {
2. "appId" : "test_app" ,
3. "secret" : "" ,
4. "nodes" : "http://agileconfig.xbaby.xyz:5000"
5. }
AgileConfig.Client连接服务端需要一点必要的信息,我们把这些信息配置在appsettings.json文件里。节点的名称叫“AgileConfig”,里面配置了:
1. appId 应用id
2. secret 应用密钥,没有的话留空
3. nodes 节点地址,如果有多个则使用英文逗号(,)分隔
AddAgileConfig
修改program.cs文件:
1. public static IHostBuilder CreateHostBuilder ( string [] args ) =>
2. Host . CreateDefaultBuilder ( args )
3. . ConfigureAppConfiguration (( context , config ) =>
4. {
5. //注入AgileConfig Configuration Provider
6. config . AddAgileConfig ;
7. })
8. . ConfigureWebHostDefaults ( webBuilder =>
9. {
10. webBuilder . UseStartup < Startup >;
11. });
通过AddAgileConfig扩展方法注入AgileConfigProvider。AgileConfigProvider才是跟配置系统打交道的组件。如果你想要使用Client的实例进行读取配置,也可以手动实例化一个client然后通过AddAglieConfig的另外一个重载注入进去。
1. Host . CreateDefaultBuilder ( args )
2. . ConfigureAppConfiguration (( context , config ) =>
3. {
4. //注入AgileConfig Configuration Provider
5. var client = new ConfigClient ;
6. config . AddAgileConfig ( client );
7. })
读取配置
通过以上的设置,其实后面的配置读取跟使用appsettings.json没什么区别了。
1. public HomeController (
2. ILogger < HomeController > logger ,
3. IConfiguration configuration ,
4. )
5. {
6. _logger = logger ;
7. _IConfiguration = configuration ;
8. }
9.
10. ///
11. /// 使用IConfiguration读取配置
12. ///
13. ///
14. public IActionResult ByIConfiguration
15. {
16. var userId = _IConfiguration [ "userId" ];
17. var dbConn = _IConfiguration [ "db:connection" ];
18.
19. ViewBag . userId = userId ;
20. ViewBag . dbConn = dbConn ;
21.
22. return View ( "Configuration" );
23. }
控制台下读取配置
当然了从本质上来说控制台项目跟mvc项目没啥区别。同样可以引入ConfigurationBuilder来注入ConfigClient。但是一般我们使用控制台可能是写个小工具,不用搞的这么复杂,直接new一个ConfigClient的实例是最直接的方法。
1. static void Main ( string [] args )
2. {
3. Console . WriteLine ( "Hello World!" );
4.
5. var appId = "test_app" ;
6. var secret = "" ;
7. var nodes = "http://agileconfig.xbaby.xyz:5000" ;
8. //使用有参构造函数,手动传入appid等信息
9. var client = new ConfigClient ( appId , secret , nodes );
10.
11. Task . Run ( async =>
12. {
13. while ( true )
14. {
15. await Task . Delay ( 5000 );
16. foreach ( string key in client . Data . Keys )
17. {
18. var val = client [ key ];
19. Console . WriteLine ( "{0} : {1}" , key , val );
20. }
21. }
22. });
23.
24. client . ConnectAsync ; //如果不是mvc项目,不使用AddAgileConfig方法的话,需要手动调用ConnectAsync方法来跟服务器建立连接
25.
26. Console . WriteLine ( "Test started ." );
27. Console . Read ;
需要注意的一个地方是手工new ConfigClient是需要自己调用ConnectAsync方法进行连接服务器的。
WPF程序读取配置
跟控制台程序一样,WPF同样首选直接new一个ConfigClient实例比较简单易用。
1. public partial class App : Application
2. {
3. public static IConfigClient ConfigClient { get ; private set ; }
4. private void Application_Startup ( object sender , StartupEventArgs e )
5. {
6. //跟控制台项目一样,appid等信息取决于你如何获取。你可以写死,可以从配置文件读取,可以从别的web service读取。
7. var appId = "test_app" ;
8. var secret = "" ;
9. var nodes = "http://agileconfig.xbaby.xyz:5000" ;
10. ConfigClient = new ConfigClient ( appId , secret , nodes );
11.
12. ConfigClient . ConnectAsync . GetAwaiter ;
13. }
14. }
实例化的位置可以选在App文件的Application_Startup方法内。并且把实例直接挂到App类的静态变量上。
注意:Application_Startup方法是同步方法。调用ConnectAsync之后需要调用GetAwaiter方法等待连接成功。
在窗体程序内使用配置 1. private void Window_Loaded ( object sender , RoutedEventArgs e )
2. {
3. this . tbx1 . Text = App . ConfigClient [ "userId" ];
4. this . tbx2 . Text = App . ConfigClient [ "connection" ];
5. }
我们通过直接访问App类上的ConfigClient对象读取配置信息。
AgileConfig.Client公共方法
下面列举下Client常用的几个公共方法
gihub地址:
AgileConfig
AgileConfig.Client
AgileConfig MVCSample
AgileConfig WPFSample
AgileConfig ConsoleSample
图文来源网络