public void Subscription_Test() { var delegateCallCount = 0; var subscription = new DynamicSubscription <Test, EventHandler <EventArgs> >((test, handler) => test.TestEvent += handler, (test, handler) => test.TestEvent -= handler); var instance = new Test(); subscription.Subscribe(instance, (sender, args) => { delegateCallCount++; }); instance.RaiseEvent(); subscription.Unsubscribe(instance); instance.RaiseEvent(); Assert.AreEqual(1, delegateCallCount); }
internal DeepTracker(TrackRouteConfiguration configuration, object source) { _configuration = configuration; _sourceReference = new WeakReference(source); _propertyChangedRegistry = new Registry <Tuple <PropertyReference, object> >(); _collectionChangedRegistry = new Registry <Tuple <WeakReference, object[]> >(); _collectionChildrenIds = new ConditionalWeakTable <object, string>(); _attachmentObjectRegistry = new Registry <WeakReference>(); _propertyChangedSubscriptions = new DynamicSubscription <PropertyReference, EventHandler>( (changed, handler) => changed.TryAddValueChanged(handler), (changed, handler) => changed.TryRemoveValueChanged(handler)); _collectionChangedSubscriptions = new DynamicSubscription <INotifyCollectionChanged, NotifyCollectionChangedEventHandler>( (changed, handler) => changed.CollectionChanged += handler, (changed, handler) => changed.CollectionChanged -= handler); }