Exemple #1
0
 /// <summary>
 /// Subscribes to a message bus
 /// </summary>
 /// <typeparam name="TMessageType">The message type</typeparam>
 /// <param name="subscriptions">The subscriptions</param>
 /// <param name="action">The method called when a message is published to the bus</param>
 /// <returns>A message bus subscription</returns>
 public static IMessageBusSubscription SubscribeSimple <TMessageType>(this IMessageBusSubscriptions <TMessageType> subscriptions, Action <TMessageType> action)
 {
     return(subscriptions.Subscribe((message, token) =>
     {
         action(message);
         return Task.CompletedTask;
     }));
 }
Exemple #2
0
 /// <summary>
 ///     Registers a subscription that through a factory creates a unique message handler for each message and then calls a
 ///     handler function
 ///     This functionality can also be replicated on your own by using:
 ///     subscriptions.Subscribe(message => { var handler = new HandlerClass(); return handler.HandleMessageAsync(message); },
 ///     null);
 /// </summary>
 /// <typeparam name="TMessage">The bus message type</typeparam>
 /// <typeparam name="THandler">The handler type</typeparam>
 /// <param name="subscriptions">The message bus</param>
 /// <param name="messageHandlerFactoryFunc">The factory func (that creates the handler)</param>
 /// <param name="messageHandlerFactoryFuncSelector">The func that selectes the function to execute on the handler</param>
 /// <returns>A subscription wrapper</returns>
 public static IMessageBusSubscription RegisterFactory <TMessage, THandler>(
     this IMessageBusSubscriptions <TMessage> subscriptions,
     Func <THandler> messageHandlerFactoryFunc,
     Func <THandler, Func <TMessage, CancellationToken, Task> > messageHandlerFactoryFuncSelector)
 {
     return(subscriptions.Subscribe(
                (message, token) =>
     {
         var handler = messageHandlerFactoryFunc();
         var handlerFunc = messageHandlerFactoryFuncSelector(handler);
         return handlerFunc(message, token);
     }));
 }
Exemple #3
0
 /// <summary>
 ///     Register a subscription that through a factory creates a unique message handler for each message, calls a handler
 ///     and then disposes the handler function
 ///     This functionality can also be replicated on your own by using:
 ///     subscriptions.Subscribe(async message => { var handler = new HandlerClass(); await
 ///     handler.HandleMessageAsync(message); handler.Dispose(); }, null);
 /// </summary>
 /// <typeparam name="TMessage">The bus message type</typeparam>
 /// <typeparam name="THandler">The handler type</typeparam>
 /// <param name="subscriptions">The message bus</param>
 /// <param name="messageHandlerFactoryFunc">The factory func (that creates the handler)</param>
 /// <param name="messageHandlerFactoryFuncSelector">The func that selectes the function to execute on the handler</param>
 /// <returns>A subscription wrapper</returns>
 public static IMessageBusSubscription RegisterFactoryWithDisposableHandler <TMessage, THandler>(
     this IMessageBusSubscriptions <TMessage> subscriptions,
     Func <THandler> messageHandlerFactoryFunc,
     Func <THandler, Func <TMessage, CancellationToken, Task> > messageHandlerFactoryFuncSelector)
     where THandler : IDisposable
 {
     return(subscriptions.Subscribe(
                async(message, token) =>
     {
         var handler = messageHandlerFactoryFunc();
         var handlerFunc = messageHandlerFactoryFuncSelector(handler);
         await handlerFunc(message, token).ConfigureAwait(false);
         handler.Dispose();
     }));
 }
        public ViewModel(IMessageBusSubscriptions <OrdersListUpdatedEvent> subscriptions, bool weakReference)
        {
            this.Subscription = subscriptions.Subscribe(
                b =>
            {
                if (weakReference)
                {
                    b.WeakReference(this);
                }
                else
                {
                    b.Handler(this);
                }
            });

            this.isWeak = weakReference;
        }
Exemple #5
0
        /// <summary>
        ///     Create a message handler chain to set up a subscription
        /// </summary>
        /// <typeparam name="TMessageType">The message type</typeparam>
        /// <param name="subscriptions">The subscriptions interface</param>
        /// <param name="setupAction">The method called to configure the message handler chain for the new subscription</param>
        /// <returns>The new message handler chain</returns>
        public static IChain <TMessageType> Subscribe <TMessageType>(
            this IMessageBusSubscriptions <TMessageType> subscriptions,
            Action <IChainBuilder <TMessageType> > setupAction)
        {
            var builder = new ChainBuilder <TMessageType>();

            setupAction(builder);

            var subscriptionNotification = new ChainBuilderNotifier();
            var services  = new ChainBuilderSetupServices(subscriptionNotification);
            var chainFunc = builder.BuildFunc(services);

            var subscription = subscriptions.Subscribe(chainFunc);

            var chain = new Chain <TMessageType>(chainFunc, subscription.Dispose);

            subscriptionNotification.Notify(chain);

            return(chain);
        }
Exemple #6
0
 /// <summary>
 /// Subscribes to a message bus
 /// </summary>
 /// <typeparam name="TMessageType">The message type</typeparam>
 /// <param name="subscriptions">The subscriptions</param>
 /// <param name="handlerFunc">The handler method</param>
 /// <returns>A message bus subscription</returns>
 public static IMessageBusSubscription SubscribeSimple <TMessageType>(this IMessageBusSubscriptions <TMessageType> subscriptions, Func <TMessageType, Task> handlerFunc)
 {
     return(subscriptions.Subscribe((message, token) => handlerFunc(message)));
 }