首先祝大家新年快樂,身體健康!
前面的文章(AgileConfig基于.NetCore的一個輕量級配置中心,AgileConfig輕量級配置中心 1.1.0 發布,支持應用間配置繼承)都是介紹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”,里面配置了:
- appId 應用id
- secret 應用密鑰,沒有的話留空
- nodes 節點地址,如果有多個則使用英文逗號(,)分隔
AddAgileConfig
修改program.cs檔案:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
//注入AgileConfig Configuration Provider
config.AddAgileConfig();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
通過AddAgileConfig擴展方法注入AgileConfigProvider,AgileConfigProvider才是跟配置系統打交道的組件,如果你想要使用Client的實體進行讀取配置,也可以手動實體化一個client然后通過AddAglieConfig的另外一個多載注入進去,
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
//注入AgileConfig Configuration Provider
var 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 |
根據組名獲取配置串列 |
| Task |
連接至服務器 |
| bool Load() | 手工從服務器拉取一次配置到客戶端 |
| void LoadConfigs(List |
手工把配置項加載到客戶端 |
| event Action |
這是一個事件,當某個配置值發生變化的時候觸發 |
gihub地址:
AgileConfig
AgileConfig.Client
AgileConfig MVCSample
AgileConfig WPFSample
AgileConfig ConsoleSample
求星星!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/244101.html
標籤:.NET技术
