1. 扩展步骤
- 实现 IConfigurationSource
- 实现 IConfigurationProvider 或者 ConfigurationProvider
- 实现 AddXXX 扩展方法
2. 实现 ConfigurationProvider 代码
internal class MyConfigProvider : ConfigurationProvider
{
Timer timer;
public MyConfigProvider() : base()
{
timer = new Timer();
timer.Elapsed += Timer_Elapsed;
timer.Interval = 3000;
timer.Start();
}
private void Timer_Elapsed(object sender,ElapsedEventArgs e)
{
Load(true);
}
public override void Load()
{
Load(false);
}
void Load(bool load)
{
this.Data["lastTime"] = DateTime.Now.ToString();
if (load)
{
base.OnReload();
}
}
}
3. 实现 IConfigurationSource 代码
internal class MyConfigSource : IConfigurationSource
{
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new MyConfigProvider();
}
}
4. 实现 AddXXX 扩展方法
public static class MyConfigBuilderExtensions
{
public static IConfigurationBuilder AddMyConfig(this IConfigurationBuilder builder)
{
builder.Add(new MyConfigSource());
return builder;
}
}
5. 调用代码
public static void Main(string[] args)
{
var build = new ConfigurationBuilder();
build.AddMyConfig();
var configRoot = build.Build();
ChangeToken.OnChange(() => configRoot.GetReloadToken(), ()=>
{
Console.WriteLine(configRoot["lastTime"]);
});
CreateHostBuilder(args).Build().Run();
}