private SubscriptionToken AddSubscriptionInternal <TMessage>(Action <TMessage> deliveryAction, Func <TMessage, bool> messageFilter, bool strongReference, IMapleMessageProxy proxy) where TMessage : class, IMapleMessage { if (deliveryAction == null) { throw new ArgumentNullException(nameof(deliveryAction), $"{nameof(deliveryAction)} {Resources.IsRequired}"); } if (messageFilter == null) { throw new ArgumentNullException(nameof(messageFilter), $"{nameof(messageFilter)} {Resources.IsRequired}"); } if (proxy == null) { throw new ArgumentNullException(nameof(proxy), $"{nameof(proxy)} {Resources.IsRequired}"); } lock (_SubscriptionsPadlock) { var subscriptionToken = new SubscriptionToken(this, typeof(TMessage)); IMapleMessageSubscription subscription; if (strongReference) { subscription = new StrongMapleMessageSubscription <TMessage>(_translationProvider, subscriptionToken, deliveryAction, messageFilter); } else { subscription = new WeakMapleMessageSubscription <TMessage>(_translationProvider, subscriptionToken, deliveryAction, messageFilter); } _subscriptions.Add(new SubscriptionItem(proxy, subscription)); return(subscriptionToken); } }
public SubscriptionToken Subscribe <TMessage>(Action <TMessage> deliveryAction, Func <TMessage, bool> messageFilter, bool useStrongReferences, IMapleMessageProxy proxy) where TMessage : class, IMapleMessage { return(AddSubscriptionInternal(deliveryAction, messageFilter, useStrongReferences, proxy)); }
public MapleMessenger(ITranslationProvider translationProvider, ILoggingService log, IMapleMessageProxy mapleMessageProxy) { _translationProvider = translationProvider ?? throw new ArgumentNullException(nameof(translationProvider), $"{nameof(translationProvider)} {Resources.IsRequired}"); _log = log ?? throw new ArgumentNullException(nameof(log), $"{nameof(log)} {Resources.IsRequired}"); _mapleMessageProxy = mapleMessageProxy ?? throw new ArgumentNullException(nameof(mapleMessageProxy), $"{nameof(mapleMessageProxy)} {Resources.IsRequired}"); }
public SubscriptionToken Subscribe <TMessage>(Action <TMessage> deliveryAction, IMapleMessageProxy proxy) where TMessage : class, IMapleMessage { return(AddSubscriptionInternal(deliveryAction, (m) => true, true, proxy)); }
public SubscriptionItem(IMapleMessageProxy proxy, IMapleMessageSubscription subscription) { Proxy = proxy; Subscription = subscription; }