紫渊

不要贪图无所不有,否则你将一无所有;不要贪图无所不知,否则你将一无所知;不要企图无所不能,否着你将一无所能。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

    写作一直是我比较头疼的事,从事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);
        }
    }
posted on 2018-09-29 10:57  紫渊  阅读(541)  评论(0)    收藏  举报