public ICommandHandlerCollection Add <TCommand>(ICommandHandler <TCommand> handler)
            {
                Ensure.NotNull(handler, "handler");
                HandlerDescriptor descriptor = descriptorProvider.Get(handler, typeof(TCommand));

                lock (storageLock)
                    storage[descriptor.ArgumentType] = descriptor;

                return(this);
            }
Ejemplo n.º 2
0
        public Task PublishAsync <TEvent>(TEvent payload)
        {
            Ensure.NotNull(payload, "payload");

            ArgumentDescriptor          argument = descriptorProvider.Get(payload);
            HashSet <HandlerDescriptor> handlers;

            if (storage.TryGetValue(argument.ArgumentType, out handlers))
            {
                return(PublishAsync(handlers, argument, payload, true));
            }

            return(Async.CompletedTask);
        }
            public ICommandHandlerCollection Add <TCommand>(ICommandHandler <TCommand> handler)
            {
                Ensure.NotNull(handler, "handler");
                HandlerDescriptor descriptor = descriptorProvider.Get(handler, typeof(TCommand));

                lock (storageLock)
                    storage[descriptor.ArgumentType] = descriptor;

                if (log.IsDebugEnabled())
                {
                    log.Debug($"Added a handler '{descriptor.HandlerIdentifier ?? descriptor.Handler.GetType().FullName}'.");
                }

                return(this);
            }
Ejemplo n.º 4
0
            public IEventHandlerCollection Add <TEvent>(IEventHandler <TEvent> handler)
            {
                Ensure.NotNull(handler, "handler");

                HandlerDescriptor           descriptor = descriptorProvider.Get(handler, typeof(TEvent));
                HashSet <HandlerDescriptor> handlers;

                if (!storage.TryGetValue(descriptor.ArgumentType, out handlers))
                {
                    storage[descriptor.ArgumentType] = handlers = new HashSet <HandlerDescriptor>();
                }

                handlers.Add(descriptor);
                return(this);
            }
Ejemplo n.º 5
0
        private Task HandleAsync <TCommand>(TCommand command, bool isPersistenceUsed)
        {
            Ensure.NotNull(command, "command");

            ArgumentDescriptor argument = descriptorProvider.Get(command);
            HandlerDescriptor  handler;

            if (handlers.TryGet(argument.ArgumentType, out handler))
            {
                return(HandleInternalAsync(handler, argument, command, isPersistenceUsed, true));
            }

            DispatcherExceptionHandlers.Handle(new MissingCommandHandlerException(argument.ArgumentType));
            return(Async.CompletedTask);
        }
Ejemplo n.º 6
0
        public void AddHandler()
        {
            var descriptorProvider = new HandlerDescriptorProvider(
                typeof(IEventHandler <>),
                typeof(IEventHandlerContext <>),
                TypeHelper.MethodName <IEventHandler <object>, object, Task>(h => h.HandleAsync),
                new DefaultExceptionHandlerCollection(),
                new DefaultExceptionHandlerCollection()
                );

            HandlerDescriptor descriptor = descriptorProvider.Get(new OrderPlacedHandler(), typeof(OrderPlaced));

            Assert.AreEqual(true, descriptor.IsPlain);
            Assert.AreEqual(false, descriptor.IsEnvelope);
            Assert.AreEqual(false, descriptor.IsContext);
        }