public void DisposeTest()
        {
            string actualValue = null;

            TestObject obj = new TestObject {
                SValue = "Test String", IValue = 10
            };
            WeakReference wr = new WeakReference(obj);

            PropertyObserver <TestObject> po = new PropertyObserver <TestObject>(obj);

            po.RegisterHandler(o => o.SValue, (oo) => actualValue = oo.SValue);

            obj.SValue = "1";
            Assert.AreEqual("1", actualValue);

            po.Dispose();
            obj.SValue = "2";
            Assert.AreEqual("1", actualValue);

#if !DEBUG
            obj = null;
            GC.Collect(2, GCCollectionMode.Forced);
            Assert.IsFalse(wr.IsAlive);
#endif
        }
        public void DisposeWithGlobalHandler()
        {
            bool       gotPropChange = false;
            TestObject obj           = new TestObject {
                SValue = "Test String", IValue = 10
            };
            PropertyObserver <TestObject> po = new PropertyObserver <TestObject>(obj);

            po.PropertyChanged += (s, e) => { gotPropChange = true; };

            po.Dispose();
            obj.IValue = 5;
            Assert.IsFalse(gotPropChange);
        }