public bool Unsubscribe <TEvent>(TEvent eventType, MediatorToken token) { if (token == null) { return(false); } var type = typeof(TEvent); if (SubscriptionTokens.ContainsKey(eventType) && SubscriptionTokens[eventType].Contains(token)) { var killedIt = SubscriptionTokens[eventType].SafeRemove(token); Action <object> someAction; killedIt = killedIt && RegisteredEvents.TryRemove(token, out someAction); return(killedIt); } else if (TypesToTokens.ContainsKey(type) && TypesToTokens[type].Contains(token)) { var killedIt = TypesToTokens[type].SafeRemove(token); Action <object> someAction; killedIt = killedIt && RegisteredEvents.TryRemove(token, out someAction); return(killedIt); } return(false); }
public MediatorToken Subscribe(ViewModelEvents eventType, Action <object> onTriggered) { if (onTriggered == null) { return(null); } MediatorToken token = null; if (!SubscriptionTokens.ContainsKey(eventType)) { token = new MediatorToken(); RegisteredEvents.TryAdd(token, onTriggered); SubscriptionTokens.TryAdd(eventType, new ConcurrentList <MediatorToken>() { token }); } else { token = new MediatorToken(); RegisteredEvents[token] = onTriggered; SubscriptionTokens[eventType].Add(token); } return(token); }
public bool Unsubscribe(ViewModelEvents eventType, MediatorToken token) { if (token == null) { return(false); } if (SubscriptionTokens.ContainsKey(eventType) && SubscriptionTokens[eventType].Contains(token)) { var killedIt = SubscriptionTokens[eventType].Remove(token); Action <object> someAction; killedIt = killedIt && RegisteredEvents.TryRemove(token, out someAction); return(killedIt); } return(false); }
/// <summary> /// Returns a token for a subscribed event /// </summary> /// <typeparam name="TEvent"></typeparam> /// <param name="onTriggered"></param> /// <param name="eventType">If null, registers the action with the Type</param> /// <returns></returns> public MediatorToken Subscribe <TEvent>(Action <object> onTriggered, TEvent eventType = null) where TEvent : class { if (onTriggered == null) { return(null); } MediatorToken token = null; var type = typeof(TEvent); if (TypesToTokens.ContainsKey(type)) { token = new MediatorToken(); RegisteredEvents[token] = onTriggered; TypesToTokens[type].SafeAdd(token); } else if (eventType != null && SubscriptionTokens.ContainsKey(eventType)) { token = new MediatorToken(); RegisteredEvents[token] = onTriggered; SubscriptionTokens[eventType].SafeAdd(token); } else if (eventType != null) { token = new MediatorToken(); RegisteredEvents.TryAdd(token, onTriggered); SubscriptionTokens.TryAdd(eventType, new ConcurrentList <MediatorToken>() { token }); } else { token = new MediatorToken(); RegisteredEvents.TryAdd(token, onTriggered); TypesToTokens.TryAdd(type, new ConcurrentList <MediatorToken>() { token }); } return(token); }