|
|
|
|
|
using OptionStudy.UnitApp.Next;
|
|
|
|
|
|
namespace OptionStudy.Next
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 配置的同步
|
|
|
/// </summary>
|
|
|
public class ConfigSyncTest : IDisposable
|
|
|
{
|
|
|
private readonly ITestOutputHelper testOutput;
|
|
|
|
|
|
public ConfigSyncTest(ITestOutputHelper testOutputHelper)
|
|
|
{
|
|
|
this.testOutput = testOutputHelper;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 触发同步事件
|
|
|
/// Provider 执行 Load() 方法
|
|
|
/// </summary>
|
|
|
[Fact]
|
|
|
public void SyncConfigFor_Provider_Load_Test()
|
|
|
{
|
|
|
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs/appsettings.json");
|
|
|
|
|
|
var root = new ConfigurationBuilder()
|
|
|
.AddJsonFile(filePath, false, true)
|
|
|
.Build();
|
|
|
bool excuted =false;
|
|
|
|
|
|
Action<object?> run = (obj) => // 执行事件
|
|
|
{
|
|
|
excuted=true;
|
|
|
var configJsonText = System.Text.Json.JsonSerializer.Serialize(root.Get<AppOption>());
|
|
|
testOutput?.WriteLine(configJsonText);
|
|
|
};
|
|
|
|
|
|
//注册回调事件
|
|
|
root.GetReloadToken().RegisterChangeCallback(run,null);
|
|
|
|
|
|
//触发回调:Provider 重新加载数据
|
|
|
root.Providers.First().Load();
|
|
|
|
|
|
//等待一会,监控到文件变化后会执行回调方法
|
|
|
Thread.Sleep(500);
|
|
|
|
|
|
//回调执行过
|
|
|
Assert.True(excuted);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 触发同步事件
|
|
|
/// IConfigurationRoot 执行 Reload() 方法
|
|
|
/// </summary>
|
|
|
[Fact]
|
|
|
public void SyncConfigFor_IConfigurationRoot_Reload_Test()
|
|
|
{
|
|
|
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs/appsettings.json");
|
|
|
|
|
|
var root = new ConfigurationBuilder()
|
|
|
.AddJsonFile(filePath, false, true)
|
|
|
.Build();
|
|
|
|
|
|
bool excuted = false;
|
|
|
Action<object?> run = (obj) => // 执行事件
|
|
|
{
|
|
|
excuted = true;
|
|
|
var configJsonText = System.Text.Json.JsonSerializer.Serialize(root.Get<AppOption>());
|
|
|
testOutput?.WriteLine(configJsonText);
|
|
|
};
|
|
|
|
|
|
//注册回调事件
|
|
|
root.GetReloadToken().RegisterChangeCallback(run, null);
|
|
|
|
|
|
//触发回调:ConfigurationRoot 重新加载
|
|
|
root.Reload();
|
|
|
|
|
|
//等待一会,监控到文件变化后会执行回调方法
|
|
|
Thread.Sleep(500);
|
|
|
|
|
|
//回调执行过
|
|
|
Assert.True(excuted);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 触发同步事件
|
|
|
/// 修改物理文件内容
|
|
|
/// </summary>
|
|
|
[Fact]
|
|
|
public void SyncConfigFor_ChangeFile_Test()
|
|
|
{
|
|
|
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs/appsettings.json");
|
|
|
|
|
|
var root = new ConfigurationBuilder()
|
|
|
.AddJsonFile(filePath, false, true)
|
|
|
.Build();
|
|
|
|
|
|
bool excuted = false;
|
|
|
Action<object?> run = (obj) => // 执行事件
|
|
|
{
|
|
|
excuted = true;
|
|
|
var configJsonText = System.Text.Json.JsonSerializer.Serialize(root.Get<AppOption>());
|
|
|
testOutput?.WriteLine(configJsonText);
|
|
|
};
|
|
|
|
|
|
//注册回调事件
|
|
|
root.GetReloadToken().RegisterChangeCallback(run, null);
|
|
|
|
|
|
//触发回调:修改配置源文件的内容
|
|
|
File.AppendAllText(filePath, " ");
|
|
|
|
|
|
//等待一会,监控到文件变化后会执行回调方法
|
|
|
Thread.Sleep(500);
|
|
|
|
|
|
//回调执行过
|
|
|
Assert.True(excuted);
|
|
|
}
|
|
|
|
|
|
public void Dispose()
|
|
|
{
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|