Beispiel #1
0
        public void DoAnything_EventMustBeFired()
        {
            var root = CreateRoot();
            var cw   = new ChangeWatcher(root);
            IConfigurationChangeInfo info = null;

            cw.ChangePushed += (o, e) =>
            {
                info = e;
            };
            root["a"] = "b";
            Assert.IsNotNull(info);
            EventArgs changeMgrArg = null;

            cw.ChangeMerged += (o, e) =>
            {
                changeMgrArg = e;
            };
            cw.Merge();
            Assert.IsNotNull(changeMgrArg);
            EventArgs changeClearedArg = null;

            cw.ChangeCleared += (o, e) =>
            {
                changeClearedArg = e;
            };
            cw.Clear();
            Assert.IsNotNull(changeClearedArg);
        }
        public void Init_GetVarableReport(string name, string val, ConfigurationTypes type, bool isArray)
        {
            var root  = new ConfigurationRoot(new IConfigurationProvider[0]);
            var infos = new IConfigurationChangeInfo[]
            {
                new ConfigurationChangeInfo
                {
                    Key      = name,
                    Old      = "1",
                    New      = val,
                    Sender   = root,
                    Provider = null,
                    IsCreate = false
                }
            };
            var rep = ChangeReport.FromChanges(root, infos);
            var c   = rep.First().GetValueReport();

            Assert.AreEqual(name, c.Keys.Single());
            var r = c.Values.Single();

            Assert.AreEqual(isArray, r.IsArray);
            Assert.AreEqual(type, r.TypeCode);
            Assert.AreEqual(root, r.Configuration);
            Assert.AreEqual(infos[0], r.Info);
        }
        /// <summary>
        /// 撤销操作
        /// </summary>
        /// <param name="changeInfo"></param>
        public static void Undo(this IConfigurationChangeInfo changeInfo)
        {
            if (changeInfo is null)
            {
                throw new System.ArgumentNullException(nameof(changeInfo));
            }

            changeInfo.Provider.Set(changeInfo.Key, changeInfo.Old);
        }
 public ChangeValueInfo(
     IConfiguration configuration,
     IConfigurationChangeInfo info,
     ConfigurationTypes typeCode,
     bool isArray)
 {
     Configuration = configuration;
     Info          = info;
     TypeCode      = typeCode;
     IsArray       = isArray;
 }
 /// <summary>
 /// 创建撤销更改信息
 /// </summary>
 /// <param name="changeInfo"></param>
 /// <returns></returns>
 public static IConfigurationChangeInfo CreateUndo(this IConfigurationChangeInfo changeInfo)
 {
     return(new ConfigurationChangeInfo
     {
         Key = changeInfo.Key,
         New = changeInfo.Old,
         Old = changeInfo.New,
         Provider = changeInfo.Provider,
         Sender = changeInfo.Sender
     });
 }
 private void Notifyable_ConfigurationChanged(IConfigurationChangeInfo info)
 {
     if (IgnoreSame || info.New != info.Old)
     {
         if (Condition(info))
         {
             var tk = new ChangeIdentity(info.Key, info.Provider);
             changeInfos.AddOrUpdate(tk, info, (a, b) => info);
             ChangePushed?.Invoke(this, info);
         }
     }
 }
        public void GivenNotSameProvider_MustThrowException()
        {
            var root      = new ConfigurationRoot(new IConfigurationProvider[0]);
            var provider1 = new NullConfigurationProvider();
            var provider2 = new NullConfigurationProvider();
            var infos     = new IConfigurationChangeInfo[]
            {
                new ConfigurationChangeInfo
                {
                    Provider = provider1
                }
            };

            Assert.ThrowsException <ArgumentException>(() => new ChangeReport(root, provider2, infos));
        }
        /// <summary>
        /// 创建撤销更改信息
        /// </summary>
        /// <param name="changeInfo"></param>
        /// <returns></returns>
        public static IConfigurationChangeInfo CreateUndo(this IConfigurationChangeInfo changeInfo)
        {
            if (changeInfo is null)
            {
                throw new System.ArgumentNullException(nameof(changeInfo));
            }

            return(new ConfigurationChangeInfo
            {
                Key = changeInfo.Key,
                New = changeInfo.Old,
                Old = changeInfo.New,
                Provider = changeInfo.Provider,
                Sender = changeInfo.Sender
            });
        }
        public void Init_PropertyValueMustEqualInput()
        {
            var root  = new ConfigurationRoot(new IConfigurationProvider[0]);
            var infos = new IConfigurationChangeInfo[]
            {
                new ConfigurationChangeInfo()
            };
            var rep = ChangeReport.FromChanges(root, infos);

            Assert.AreEqual(1, rep.Count());
            var changes = rep.First();

            Assert.IsNull(changes.Provider);
            Assert.AreEqual(root, changes.Configuration);
            Assert.AreEqual(1, changes.IncludeChangeInfo.Count);
            Assert.IsTrue(changes.IncludeChangeInfo.Any(x => x == infos[0]));
        }
Beispiel #10
0
        public void AddChanged_EventMustBeFired()
        {
            var builder = new ConfigurationBuilder();

            builder.AddInMemoryCollection();
            var root    = builder.BuildSavable();
            var watcher = new EmptyChangeWatcher(root);

            root["aa"] = "qaq";
            IConfigurationChangeInfo info = null;

            watcher.ChangePushed += (o, e) =>
            {
                info = e;
            };
            root["aa"] = "bb";
            Assert.IsNotNull(info);
            watcher.Dispose();
        }
Beispiel #11
0
 private void Handler(object o, IConfigurationChangeInfo e)
 {
     _ = CoreHandler();
 }
Beispiel #12
0
 /// <summary>
 /// 调用以确保更改是否可以增加
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 protected virtual bool Condition(IConfigurationChangeInfo info)
 {
     return(true);
 }
 /// <summary>
 /// 撤销操作
 /// </summary>
 /// <param name="changeInfo"></param>
 public static void Undo(this IConfigurationChangeInfo changeInfo)
 {
     changeInfo.Provider.Set(changeInfo.Key, changeInfo.Old);
 }
 private void OnConfigurationChanged(IConfigurationChangeInfo info)
 {
     ChangePushed?.Invoke(this, info);
 }