/// <summary> /// Pub-sub definition has been subscribed /// </summary> private void PubSubSubscribed(object sender, Event.DataPersistedEventArgs <PubSubSubscriptionDefinition> e) { lock (this.m_lock) { var lt = typeof(PubSubRepositoryListener <>).MakeGenericType(e.Data.ResourceType); if (!this.m_repositoryListeners.Any(o => o.GetType().Equals(lt))) { this.m_repositoryListeners.Add(this.m_serviceManager.CreateInjected(lt) as IDisposable); } } }
/// <summary> /// Fired when the pub-sub manager has indicated a subscription has been removed /// </summary> private void PubSubUnSubscribed(object sender, Event.DataPersistedEventArgs <PubSubSubscriptionDefinition> e) { lock (this.m_lock) { // If there are no further types subscribed then remove the listener var resourceXml = e.Data.ResourceType.GetSerializationName(); if (!this.m_pubSubManager.FindSubscription(o => o.ResourceTypeName == resourceXml).Any()) { var lt = typeof(PubSubRepositoryListener <>).MakeGenericType(e.Data.ResourceType); var listener = this.m_repositoryListeners.FirstOrDefault(o => lt.Equals(o.GetType())); listener.Dispose(); this.m_repositoryListeners.Remove(listener); } } }