写作一直是我比较头疼的事,从事10多年软件开发工作,基本上没写过什么文章,.net core的出现让我终于看到了.net平台的曙光,很希望广大.net开发者共同努力让.net core尽快成长起来,我也愿意为.net core技术的发展尽一分自己微薄之力,所以虽然文笔不佳,但还是要硬着头皮尝试写一写,把我在使用.net core过程中遇到的一些问题记录下来,与大家分享一下,水平有限,谬误之处请大家多多指点。
今天遇到的问题是,项目中需要监控appsettings.json文件配置,当配置改变时配置文件reload,同时更新相关业务流程,文字详细描述一个问题实在不是我强项,还是直接上代码吧!
只贴出来相关代码,不是一个完整bootstrapper类
public class Bootstrapper
{
private IDisposable _callbackRegistration;
private void ReadSettings(string filename,bool reloadOnChange)
{
var configurationBuilder= new ConfigurationBuilder();
var currentPath = Directory.GetCurrentDirectory();
if (!File.Exists(Path.Combine(currentPath, filename)))
{
return;
}
configurationBuilder
.SetBasePath(currentPath)
.AddJsonFile(filename, false, reloadOnChange);
var config = configurationBuilder.Build();
//关键在于IChangeToken(通过GetReloadToken方法获得)的应用,具体低层实现可以查阅相关资料,此处不赘述
if(reloadOnChange) _callbackRegistration = config.GetReloadToken().RegisterChangeCallback(CallBack, config);
}
private void CallBack(object obj)
{
_callbackRegistration?.Dispose();
var config = (IConfiguration)obj;
var appsettings = config.Get<AppSettings>();
//TODO:取得最新配置后修改相关业务逻辑
//重新注册callback,下次appsettings.josn更新后会自动调用
_callbackRegistration = config.GetReloadToken().RegisterChangeCallback(CallBack, obj);
}
}
浙公网安备 33010602011771号