private PipelineContinuation InitializeContainer(ICommunicationContext arg) { var container = new TinyIoCContainer(); container.Register <IHandleRequests <AddTaskCommand>, AddTaskCommandHandler>().AsMultiInstance(); container.Register <ITaskListRetriever, TaskListRetriever>().AsMultiInstance(); container.Register <ITasksDAO, TasksDAO>().AsMultiInstance(); var logger = LogManager.GetLogger("TaskList"); container.Register <ILog, ILog>(logger); container.Register <IAmARequestContextFactory, InMemoryRequestContextFactory>().AsMultiInstance(); container.Register <IAmAMessageStore <Message>, RavenMessageStore>().AsSingleton(); container.Register <IAmAMessagingGateway, RMQMessagingGateway>().AsSingleton(); var handlerFactory = new TinyIocHandlerFactory(container); var messageMapperFactory = new TinyIoCMessageMapperFactory(container); var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register <AddTaskCommand, AddTaskCommandHandler>(); //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 } }; //create message mappers var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory); messageMapperRegistry.Add(typeof(TaskReminderCommand), typeof(TaskReminderCommandMessageMapper)); //create the gateway var gateway = new RMQMessagingGateway(logger); var commandProcessor = CommandProcessorBuilder.With() .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory)) .Policies(policyRegistry) .Logger(logger) .TaskQueues(new MessagingConfiguration( messageStore: new RavenMessageStore(new EmbeddableDocumentStore().Initialize(), logger), messagingGateway: gateway, messageMapperRegistry: messageMapperRegistry )) .RequestContextFactory(new InMemoryRequestContextFactory()) .Build(); resolver.AddDependencyInstance <IAmACommandProcessor>(commandProcessor, DependencyLifetime.Singleton); resolver.AddDependency <ITaskRetriever, TaskRetriever>(DependencyLifetime.Singleton); resolver.AddDependency <ITaskListRetriever, TaskListRetriever>(DependencyLifetime.Singleton); return(PipelineContinuation.Continue); }
public TaskMailerService() { //Create a logger var properties = new NameValueCollection(); properties["showDateTime"] = "true"; LogManager.Adapter = new ConsoleOutLoggerFactoryAdapter(properties); var logger = LogManager.GetLogger(typeof(Dispatcher)); var container = new TinyIoCContainer(); container.Register <IAmAMessageMapper <TaskReminderCommand>, TaskReminderCommandMessageMapper>(); container.Register <MailTaskReminderHander, MailTaskReminderHander>(); container.Register <IAmAMailGateway, MailGateway>(); container.Register <ILog>(logger); container.Register <IAmAMailTranslator, MailTranslator>(); var handlerFactory = new TinyIocHandlerFactory(container); var messageMapperFactory = new TinyIoCMessageMapperFactory(container); var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register <TaskReminderCommand, MailTaskReminderHander>(); //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 } }; //create message mappers var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory) { { typeof(TaskReminderCommand), typeof(TaskReminderCommandMessageMapper) } }; //create the gateway var gateway = new RMQMessagingGateway(logger); var builder = DispatchBuilder.With() .WithLogger(logger) .WithCommandProcessor(CommandProcessorBuilder.With() .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory)) .Policies(policyRegistry) .Logger(logger) .TaskQueues(new MessagingConfiguration( messageStore: new RavenMessageStore(new EmbeddableDocumentStore().Initialize(), logger), messagingGateway: gateway, messageMapperRegistry: messageMapperRegistry )) .RequestContextFactory(new InMemoryRequestContextFactory()) .Build() ) .WithMessageMappers(messageMapperRegistry) .WithChannelFactory(new RMQInputChannelfactory(gateway)) .ConnectionsFromConfiguration(); dispatcher = builder.Build(); }