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); }
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(); }
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); }
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); }
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(); }