public void ChainedPropertyDependency() { var obj = new ChainedPropertyDependencyTestObject(1, 2, 3); Assert.AreEqual(1, obj.Prop1); Assert.AreEqual(2, obj.Prop2); Assert.AreEqual(3, obj.Prop3); int prop1_call_count = 0; int prop2_call_count = 0; int prop3_call_count = 0; obj.Register("Prop1", () => prop1_call_count++); obj.Register("Prop2", () => prop2_call_count++); obj.Register("Prop3", () => prop3_call_count++); obj.Prop1 = 42; obj.Prop2 = 23; obj.Prop3 = 17; Assert.AreEqual(1, prop1_call_count); Assert.AreEqual(2, prop2_call_count); Assert.AreEqual(3, prop3_call_count); Assert.AreEqual(42, obj.Prop1); Assert.AreEqual(23, obj.Prop2); Assert.AreEqual(17, obj.Prop3); }