public void RegisterNotifyingObject(NotifyingObject obj)
        {
            Contract.Requires <ArgumentNullException>(obj != null);

            RegisterNotifyingObject((INotifyPropertyChanging)obj);
            RegisterNotifyingObject((INotifyPropertyChanged)obj);
        }
        public void RegisterNotifyingObject(NotifyingObject obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj), "Contract assertion not met: obj != null");
            }

            RegisterNotifyingObject((INotifyPropertyChanging)obj);
            RegisterNotifyingObject((INotifyPropertyChanged)obj);
        }