示例#1
0
        /// <summary>
        /// Subscribes the specified handler for messages of type <typeparamref name="TMessage" />.
        /// </summary>
        /// <typeparam name="TMessage">The type of the message.</typeparam>
        /// <param name="weakHandler">The message handler to register.</param>
        /// <param name="threadOption">Specifies on which Thread the <paramref name="weakHandler" /> is executed.</param>
        /// <returns>The <see cref="IEventAggregatorHandler" />.</returns>
        public IEventAggregatorHandler Subscribe <TMessage>([EmptyCapture] Func <TMessage, Task> weakHandler, ThreadOption threadOption)
        {
            VerifyDelegate(weakHandler);

            var handler = new EventAggregatorHandler <object, TMessage>(_staticTarget, (t, m) => weakHandler(m).ObserveException().Watch(), threadOption);

            AddHandler(handler);
            return(handler);
        }
示例#2
0
        /// <summary>
        /// Subscribes the specified handler for messages of type <typeparamref name="TMessage" />.
        /// </summary>
        /// <typeparam name="TMessage">The type of the message.</typeparam>
        /// <param name="weakHandler">The message handler to register.</param>
        /// <param name="threadOption">Specifies on which Thread the <paramref name="weakHandler" /> is executed.</param>
        /// <returns>The <see cref="IEventAggregatorHandler" />.</returns>
        public IEventAggregatorHandler Subscribe <TMessage>([EmptyCapture] Action <TMessage> weakHandler, ThreadOption threadOption)
        {
            VerifyDelegate(weakHandler);

            var handler = new EventAggregatorHandler <object, TMessage>(_staticTarget, (t, m) => weakHandler(m), threadOption);

            AddHandler(handler);
            return(handler);
        }
示例#3
0
        /// <summary>
        /// Subscribes the specified handler for messages of type <typeparamref name="TMessage" />.
        /// </summary>
        /// <typeparam name="TTarget">The type of the handler target.</typeparam>
        /// <typeparam name="TMessage">The type of the message.</typeparam>
        /// <param name="target">The message handler target.</param>
        /// <param name="weakHandler">The message handler to register.</param>
        /// <param name="threadOption">Specifies on which Thread the <paramref name="weakHandler" /> is executed.</param>
        /// <returns>The <see cref="IEventAggregatorHandler" />.</returns>
        public IEventAggregatorHandler Subscribe <TTarget, TMessage>(TTarget target, [EmptyCapture] Action <TTarget, TMessage> weakHandler, ThreadOption threadOption)
            where TTarget : class
        {
            VerifyTarget(target);
            VerifyDelegate(weakHandler);

            var handler = new EventAggregatorHandler <TTarget, TMessage>(target, weakHandler, threadOption);

            AddHandler(handler);
            return(handler);
        }
示例#4
0
        /// <summary>
        /// Subscribes the specified handler for messages of type <typeparamref name="TMessage" />.
        /// </summary>
        /// <typeparam name="TTarget">The type of the handler target.</typeparam>
        /// <typeparam name="TMessage">The type of the message.</typeparam>
        /// <param name="target">The message handler target.</param>
        /// <param name="weakHandler">The message handler to register.</param>
        /// <param name="threadOption">Specifies on which Thread the <paramref name="weakHandler" /> is executed.</param>
        /// <returns>The <see cref="IEventAggregatorHandler" />.</returns>
        public IEventAggregatorHandler Subscribe <TTarget, TMessage>(TTarget target, [EmptyCapture] Func <TTarget, TMessage, Task> weakHandler, ThreadOption threadOption)
            where TTarget : class
        {
            VerifyTarget(target);
            VerifyDelegate(weakHandler);

            var handler = new EventAggregatorHandler <TTarget, TMessage>(target, (t, m) => weakHandler(t, m).ObserveException().Watch(), threadOption);

            AddHandler(handler);
            return(handler);
        }
        private IEventAggregatorHandler SubscribeCore <TTarget, TMessage>(TTarget target, Func <TTarget, TMessage, Task> handler, ThreadOption threadOption)
            where TTarget : class
        {
            var item = new EventAggregatorHandler <TTarget, TMessage>(target, handler, threadOption);

            lock (_handlers)
            {
                _handlers.RemoveAll(h => h.IsDead);
                _handlers.Add(item);
            }

            return(item);
        }