コード例 #1
0
        public static void Run(UnityContainer container)
        {
            container.RegisterType <StoreFrontController>();
            container.RegisterInstance(typeof(ILog), LogProvider.For <StoreService>(), new ContainerControlledLifetimeManager());
            container.RegisterType <AddOrderCommandHandler>();
            container.RegisterType <AddProductCommandHandler>();
            container.RegisterType <ChangeProductCommandHandler>();
            container.RegisterType <RemoveProductCommandHandler>();
            container.RegisterType <IProductsDAO, ProductsDAO>();

            var logger         = container.Resolve <ILog>();
            var handlerFactory = new UnityHandlerFactory(container);

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <AddOrderCommand, AddOrderCommandHandler>();
            subscriberRegistry.Register <AddProductCommand, AddProductCommandHandler>();
            subscriberRegistry.Register <ChangeProductCommand, ChangeProductCommandHandler>();
            subscriberRegistry.Register <RemoveProductCommand, RemoveProductCommandHandler>();

            //create policies
            var retryPolicy = Policy
                              .Handle <Exception>()
                              .WaitAndRetry(new[]
            {
                TimeSpan.FromMilliseconds(50),
                TimeSpan.FromMilliseconds(100),
                TimeSpan.FromMilliseconds(150)
            });

            var circuitBreakerPolicy = Policy
                                       .Handle <Exception>()
                                       .CircuitBreaker(1, TimeSpan.FromMilliseconds(500));

            var policyRegistry = new PolicyRegistry()
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }
            };

            var messageMapperFactory  = new UnityMessageMapperFactory(container);
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory);

            messageMapperRegistry.Register <AddOrderCommand, AddOrderCommandMessageMapper>();

            var gateway = new RmqMessageProducer(container.Resolve <ILog>());
            var dbPath  = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase.Substring(8)), "App_Data\\MessageStore.sdf");

            IAmAMessageStore <Message> sqlMessageStore = new MsSqlMessageStore(new MsSqlMessageStoreConfiguration("DataSource=\"" + dbPath + "\"", "Messages", MsSqlMessageStoreConfiguration.DatabaseType.SqlCe), logger);

            var commandProcessor = CommandProcessorBuilder.With()
                                   .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                                   .Policies(policyRegistry)
                                   .Logger(logger)
                                   .TaskQueues(new MessagingConfiguration(sqlMessageStore, gateway, messageMapperRegistry))
                                   .RequestContextFactory(new InMemoryRequestContextFactory())
                                   .Build();

            container.RegisterInstance(typeof(IAmACommandProcessor), commandProcessor);
        }
コード例 #2
0
        public OrganizationApplicationService()
        {
            log4net.Config.XmlConfigurator.Configure();

            var container = new UnityContainer();
            var logger    = LogProvider.For <OrganizationApplicationService>();

            container.RegisterInstance(typeof(ILog), LogProvider.For <OrganizationApplicationService>(), new ContainerControlledLifetimeManager());
            container.RegisterType <AddOrganizationCommandHandler>();
            //container.RegisterType<AddEFOrganisationCommandHandler>();



            container.RegisterType <ChangeOrganizationCommandHandler>();
            container.RegisterType <OrganizationAddedEventHandler>();
            container.RegisterType <OrganizationAddedLegacyEventHandler>();

            //Factories
            //container.RegisterType(typeof(ICommandFactory<AddOrganizationCommand>),typeof(CommandFactory<AddOrganizationCommand, AxaAddOrganizationCommandExtension>));
            //container.RegisterType<IDomainFactory, AxaDomainFactory>();
            //container.RegisterType(typeof(ICommandFactory<>), typeof(CommandFactory<>));

            container.RegisterType <IDomainFactory, DomainFactory>();
            container.RegisterType(typeof(IDomainTracking <>), typeof(DomainTracking <>));

            //Repositories
            container.RegisterType <IOrganizationRepository, OrganizationRepository>();
            container.RegisterType(typeof(IEFGenericRepository <>), typeof(EFGenericRepository <>));
            container.RegisterType(typeof(IDapperGenericRepository <>), typeof(DapperGenericRepository <>));

            //container.RegisterType<DbContext, OrganisationDbContext>(new ContainerControlledLifetimeManager());
            container.RegisterType(typeof(IGenericRepository <>), typeof(EFGenericRepository <>));

            //Command Processor
            paramore.brighter.commandprocessor.CommandProcessor commandProcessor = CreateCommandProcesor(container);

            container.RegisterInstance(typeof(IAmACommandProcessor), commandProcessor);

            var rmqMessageConsumerFactory = new RmqMessageConsumerFactory(logger);
            var rmqMessageProducerFactory = new RmqMessageProducerFactory(logger);

            var messageMapperFactory  = new UnityMessageMapperFactory(container);
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory);

            messageMapperRegistry.Register <AddOrganizationCommand, AddOrganizationCommandMessageMapper>();

            _dispatcher = DispatchBuilder.With()
                          .CommandProcessor(commandProcessor)
                          .MessageMappers(messageMapperRegistry)
                          .ChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory, rmqMessageProducerFactory))
                          .ConnectionsFromConfiguration()
                          .Build();
        }
コード例 #3
0
        private static paramore.brighter.commandprocessor.CommandProcessor CreateCommandProcesor(UnityContainer container)
        {
            var logger         = container.Resolve <ILog>();
            var handlerFactory = new UnityHandlerFactory(container);

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <AddOrganizationCommand, AddOrganizationCommandHandler>();
            //subscriberRegistry.Register<AddOrganizationCommand, AddEFOrganisationCommandHandler>();

            subscriberRegistry.Register <ChangeOrganizationCommand, ChangeOrganizationCommandHandler>();
            subscriberRegistry.Register <OrganizationAddedEvent, OrganizationAddedEventHandler>();
            subscriberRegistry.Register <OrganizationAddedEvent, OrganizationAddedLegacyEventHandler>();

            //create retry policies
            var retryPolicy = Policy
                              .Handle <Exception>()
                              .WaitAndRetry(new[]
            {
                TimeSpan.FromMilliseconds(50),
                TimeSpan.FromMilliseconds(100),
                TimeSpan.FromMilliseconds(150)
            });

            //create circuit breaker policies
            var circuitBreakerPolicy = Policy
                                       .Handle <Exception>()
                                       .CircuitBreaker(1, TimeSpan.FromMilliseconds(500));

            var policyRegistry = new PolicyRegistry()
            {
                { paramore.brighter.commandprocessor.CommandProcessor.RETRYPOLICY, retryPolicy },
                { paramore.brighter.commandprocessor.CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }
            };


            var messageMapperFactory  = new UnityMessageMapperFactory(container);
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory);

            messageMapperRegistry.Register <AddOrganizationCommand, AddOrganizationCommandMessageMapper>();
            string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
            var    gateway          = new RmqMessageProducer(container.Resolve <ILog>());
            IAmAMessageStore <Message> sqlMessageStore = new MsSqlMessageStore(new MsSqlMessageStoreConfiguration(connectionString, "Messages", MsSqlMessageStoreConfiguration.DatabaseType.MsSqlServer), logger);

            var commandProcessor = CommandProcessorBuilder.With()
                                   .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                                   .Policies(policyRegistry)
                                   .TaskQueues(new MessagingConfiguration(sqlMessageStore, gateway, messageMapperRegistry))
                                   .RequestContextFactory(new InMemoryRequestContextFactory())
                                   .Build();

            return(commandProcessor);
        }
コード例 #4
0
        private static Dispatcher BuildDispatcher()
        {
            var container      = new UnityContainer();
            var handlerFactory = new UnityHandlerFactory(container);
            // var asyncHandlerFactory = new UnityAsyncHandlerFactory(container);
            var messageMapperFactory = new UnityMessageMapperFactory(container);

            container.RegisterType <IHandleRequests <GreetingEvent>, GreetingEventHandler>();

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <GreetingEvent, GreetingEventHandler>();
            subscriberRegistry.Register <GreetingCommand, GreetingCommandHandler>();

            //create message mappers
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory)
            {
                { typeof(GreetingEvent), typeof(GreetingEventMessageMapper) }
            };

            var connectionString       = @"Database=BrighterSqlQueue;Server=localhost;Integrated Security=SSPI;";
            var gatewayConfig          = new MsSqlMessagingGatewayConfiguration(connectionString, "QueueData");
            var messageConsumerFactory = new MsSqlMessageConsumerFactory(gatewayConfig);
            var commandProcessor       = CommandProcessorBuilder.With()
                                         .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                                         .DefaultPolicy()
                                         .NoTaskQueues()
                                         .RequestContextFactory(new InMemoryRequestContextFactory())
                                         .Build();
            var dispatcher = DispatchBuilder.With()
                             .CommandProcessor(commandProcessor)
                             .MessageMappers(messageMapperRegistry)
                             .DefaultChannelFactory(new MsSqlInputChannelFactory(messageConsumerFactory))
                             .Connections(new Connection[]
            {
                new Connection <GreetingEvent>(
                    new ConnectionName("paramore.example.greeting"),
                    new ChannelName("greeting.event"),
                    new RoutingKey("greeting.event"),
                    timeoutInMilliseconds: 200)
            }
                                          ).Build();

            container.RegisterInstance <IAmACommandProcessor>(commandProcessor);
            container.RegisterType <IHandleRequests <GreetingCommand>, GreetingCommandHandler>();
            container.RegisterType <MyValidationHandler <GreetingCommand>, GreetingCommandValidationHandler>();
            container.RegisterType <MyPostAuditHandler <GreetingCommand>, GreetingCommandPostAuditHandler>();

            return(dispatcher);
        }
コード例 #5
0
        public OrderService()
        {
            log4net.Config.XmlConfigurator.Configure();

            var logger = LogProvider.For<OrderService>();

            var container = new UnityContainer();
            container.RegisterInstance(typeof(ILog), LogProvider.For<OrderService>(), new ContainerControlledLifetimeManager());
            container.RegisterType<OrderUpdateCommandMessageMapper>();
            container.RegisterType<OrderUpdateCommandHandler>();
            container.RegisterType<IOrdersDAO, OrdersDAO>();
            container.RegisterType<IAmAMailGateway, MailGateway>();
            container.RegisterType<IAmAMailTranslator, MailTranslator>();

            var handlerFactory = new UnityHandlerFactory(container);
            var messageMapperFactory = new UnityMessageMapperFactory(container);

            var subscriberRegistry = new SubscriberRegistry();
            subscriberRegistry.Register<OrderUpdateCommand, OrderUpdateCommandHandler>();

            //create policies
            var retryPolicy = Policy
                .Handle<Exception>()
                .WaitAndRetry(new[]
                    {
                        TimeSpan.FromMilliseconds(50),
                        TimeSpan.FromMilliseconds(100),
                        TimeSpan.FromMilliseconds(150)
                    });

            var circuitBreakerPolicy = Policy
                .Handle<Exception>()
                .CircuitBreaker(1, TimeSpan.FromMilliseconds(500));

            var policyRegistry = new PolicyRegistry()
            {
                {CommandProcessor.RETRYPOLICY, retryPolicy},
                {CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy}
            };

            var commandProcessor = CommandProcessorBuilder.With()
                .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                .Policies(policyRegistry)
                .Logger(logger)
                .NoTaskQueues()
                .RequestContextFactory(new InMemoryRequestContextFactory())
                .Build();

            //create message mappers
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory);
            messageMapperRegistry.Register<OrderUpdateCommand, OrderUpdateCommandMessageMapper>();

            var rmqMessageConsumerFactory = new RmqMessageConsumerFactory(logger);

            _dispatcher = DispatchBuilder.With()
                .Logger(logger)
                .CommandProcessor(commandProcessor)
                .MessageMappers(messageMapperRegistry)
                .ChannelFactory(new InputChannelFactory(rmqMessageConsumerFactory))
                .ConnectionsFromConfiguration()
                .Build();
        }