/// <summary>
    /// 增加配置扩展
    /// </summary>
    public static class ConfigExtensions
    {
        /// <summary>
        /// 自定义扩展,增加配置 
        /// </summary>
        public static IConfigurationBuilder AddCustomConfig(this IConfigurationBuilder builder, IConfiguration configuration = null)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            return builder.Add(new ConfigSource());
        }
    }
/// <summary>
    /// 配置提供者
    /// </summary>
    public class ConfigProvider : ConfigurationProvider, IDisposable
    {
        private bool isDisposed = false;
        public ConfigProvider()
        {
            ThreadPool.QueueUserWorkItem(obj =>
            {
                while (!isDisposed)
                {
                    Load();
                    Thread.Sleep(3 * 1000);
                }
            });
        }
        /// <summary>
        /// 读写锁
        /// </summary>
        private ReaderWriterLockSlim lockObj = new ReaderWriterLockSlim();
        public override IEnumerable<string> GetChildKeys(IEnumerable<string> earlierKeys, string parentPath)
        {
            lockObj.EnterReadLock();
            try
            {
                return base.GetChildKeys(earlierKeys, parentPath);
            }
            finally
            {
                lockObj.ExitReadLock();
            }
        }
        public override bool TryGet(string key, out string value)
        {
            lockObj.EnterReadLock();
            try
            {
                return base.TryGet(key, out value);
            }
            finally
            {
                lockObj.ExitReadLock();
            }
        }
        /// <summary>
        /// 更新数据
        /// 内部数据结构: Name:asdfd:asdf:[0]
        ///              Name:asdfd:asdf:[1]
        /// </summary>
        public override void Load()
        {
            try
            {
                lockObj.EnterWriteLock();
                Data["Name"] = DateTime.Now.ToString();
            }
            finally
            {
                lockObj.ExitWriteLock();
            }
            OnReload();
        }
        public void Dispose()
        {
            isDisposed = true;
        }
    }
/// <summary>
    /// 配置源
    /// </summary>
    public class ConfigSource : IConfigurationSource
    {
        public IConfigurationProvider Build(IConfigurationBuilder builder)
        {
            return new ConfigProvider();
        }
    }
IConfigurationBuilder configBuilder = new ConfigurationBuilder();
            configBuilder.SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");
        
            var configFile = configBuilder.Build();
            configBuilder.AddCustomConfig();
            configFile = configBuilder.Build();
            var serviceCollection = new ServiceCollection();
            serviceCollection.Configure<MyOptions>(configFile);
            var serviceProvider = serviceCollection.BuildServiceProvider();
            var  _options = serviceProvider.GetRequiredService<IOptionsMonitor<MyOptions>>();
            _options.OnChange(_ => Console.WriteLine(_.Name));
            //            Task.Run(() => {
            //=
            //                while (true)
            //                {
            //                    Thread.Sleep(2000);
            //                    Console.WriteLine(_options.CurrentValue.Name);
            //                }
            //            });
            Console.WriteLine("获取到配置信息!");
            Console.ReadLine();