private CommandProcessor CommandProcessorRegistrar(TinyIoCContainer container) { //Database dao container.Register <ITasksDAO, TasksDAO>().AsSingleton(); //create handler var handlerFactory = new TinyIocHandlerFactory(container); var subscriberRegistry = new SubscriberRegistry(); container.Register <IHandleRequests <AddTaskCommand>, AddTaskCommandHandler>().AsMultiInstance(); subscriberRegistry.Register <AddTaskCommand, AddTaskCommandHandler>(); //complete handler container.Register <IHandleRequests <CompleteTaskCommand>, CompleteTaskCommandHandler>().AsMultiInstance(); subscriberRegistry.Register <CompleteTaskCommand, CompleteTaskCommandHandler>(); //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 container.Register <IAmAMessageMapper <TaskReminderCommand>, TaskReminderCommandMessageMapper>().AsMultiInstance(); var messageMapperFactory = new TinyIoCMessageMapperFactory(container); var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory); messageMapperRegistry.Add(typeof(TaskReminderCommand), typeof(TaskReminderCommandMessageMapper)); messageMapperRegistry.Add(typeof(TaskAddedEvent), typeof(TaskAddedEventMapper)); messageMapperRegistry.Add(typeof(TaskEditedEvent), typeof(TaskEditedEventMapper)); messageMapperRegistry.Add(typeof(TaskCompletedEvent), typeof(TaskCompletedEventMapper)); messageMapperRegistry.Add(typeof(TaskReminderSentEvent), typeof(TaskReminderSentEventMapper)); var gateway = new RmqMessageProducer(); IAmAMessageStore <Message> sqlMessageStore = new MsSqlMessageStore(new MsSqlMessageStoreConfiguration("Server=.;Database=brighterMessageStore;Trusted_Connection=True", "messages", MsSqlMessageStoreConfiguration.DatabaseType.MsSqlServer)); var commandProcessor = CommandProcessorBuilder.With() .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory)) .Policies(policyRegistry) .TaskQueues(new MessagingConfiguration(sqlMessageStore, gateway, messageMapperRegistry)) .RequestContextFactory(new InMemoryRequestContextFactory()) .Build(); container.Register <IAmACommandProcessor>(commandProcessor); return(commandProcessor); }
protected override void ConfigureApplicationContainer(TinyIoCContainer container) { base.ConfigureApplicationContainer(container); var logger = LogProvider.GetLogger(this.GetType().Namespace); container.Register(logger); var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register<AddTaskCommand, AddTaskCommandHandler>(); subscriberRegistry.Register<CompleteTaskCommand, CompleteTaskCommandHandler>(); container.Register<IHandleRequests<AddTaskCommand>, AddTaskCommandHandler>().AsMultiInstance(); container.Register<IHandleRequests<CompleteTaskCommand>, CompleteTaskCommandHandler>().AsMultiInstance(); var handlerFactory = new TinyIoCHandlerFactory(container); 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 sqlMessageStore = new MsSqlMessageStore(new MsSqlMessageStoreConfiguration("Server=.;Database=brighterMessageStore;Trusted_Connection=True", "messages", MsSqlMessageStoreConfiguration.DatabaseType.MsSqlServer), logger); var gateway = new AzureServiceBusMessageProducer(logger); container.Register<IAmAMessageMapper<TaskReminderCommand>, TaskReminderCommandMessageMapper>().AsMultiInstance(); var messageMapperFactory = new TinyIoCMessageMapperFactory(container); var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory); messageMapperRegistry.Add(typeof(TaskReminderCommand), typeof(TaskReminderCommandMessageMapper)); var commandProcessor = CommandProcessorBuilder .With() .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory)) .Policies(policyRegistry) .TaskQueues(new MessagingConfiguration(sqlMessageStore, gateway, messageMapperRegistry)) .RequestContextFactory(new InMemoryRequestContextFactory()) .Build(); container.Register<IAmACommandProcessor>(commandProcessor); }
private CommandProcessor CommandProcessorRegistrar(TinyIoCContainer container) { //Database dao container.Register<ITasksDAO, TasksDAO>().AsSingleton(); //create handler var handlerFactory = new TinyIocHandlerFactory(container); var subscriberRegistry = new SubscriberRegistry(); container.Register<IHandleRequests<AddTaskCommand>, AddTaskCommandHandler>().AsMultiInstance(); subscriberRegistry.Register<AddTaskCommand, AddTaskCommandHandler>(); //complete handler container.Register<IHandleRequests<CompleteTaskCommand>, CompleteTaskCommandHandler>().AsMultiInstance(); subscriberRegistry.Register<CompleteTaskCommand, CompleteTaskCommandHandler>(); //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 container.Register<IAmAMessageMapper<TaskReminderCommand>, TaskReminderCommandMessageMapper>().AsMultiInstance(); var messageMapperFactory = new TinyIoCMessageMapperFactory(container); var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory); messageMapperRegistry.Add(typeof(TaskReminderCommand), typeof(TaskReminderCommandMessageMapper)); messageMapperRegistry.Add(typeof(TaskAddedEvent), typeof(TaskAddedEventMapper)); messageMapperRegistry.Add(typeof(TaskEditedEvent), typeof(TaskEditedEventMapper)); messageMapperRegistry.Add(typeof(TaskCompletedEvent), typeof(TaskCompletedEventMapper)); messageMapperRegistry.Add(typeof(TaskReminderSentEvent), typeof(TaskReminderSentEventMapper)); var gateway = new RmqMessageProducer(); IAmAMessageStore<Message> sqlMessageStore = new MsSqlMessageStore(new MsSqlMessageStoreConfiguration("Server=.;Database=brighterMessageStore;Trusted_Connection=True", "messages", MsSqlMessageStoreConfiguration.DatabaseType.MsSqlServer)); var commandProcessor = CommandProcessorBuilder.With() .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory)) .Policies(policyRegistry) .TaskQueues(new MessagingConfiguration(sqlMessageStore, gateway, messageMapperRegistry)) .RequestContextFactory(new InMemoryRequestContextFactory()) .Build(); container.Register<IAmACommandProcessor>(commandProcessor); return commandProcessor; }
protected override void ConfigureApplicationContainer(TinyIoCContainer container) { base.ConfigureApplicationContainer(container); var logger = LogProvider.GetLogger(this.GetType().Namespace); container.Register(logger); var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register <AddTaskCommand, AddTaskCommandHandler>(); subscriberRegistry.Register <CompleteTaskCommand, CompleteTaskCommandHandler>(); container.Register <IHandleRequests <AddTaskCommand>, AddTaskCommandHandler>().AsMultiInstance(); container.Register <IHandleRequests <CompleteTaskCommand>, CompleteTaskCommandHandler>().AsMultiInstance(); var handlerFactory = new TinyIoCHandlerFactory(container); 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 sqlMessageStore = new MsSqlMessageStore(new MsSqlMessageStoreConfiguration("Data Source=|DataDirectory|Tasks.sdf;Persist Security Info=False;", "messages", MsSqlMessageStoreConfiguration.DatabaseType.SqlCe), logger); var gateway = new AzureServiceBusMessageProducer(logger); container.Register <IAmAMessageMapper <TaskReminderCommand>, TaskReminderCommandMessageMapper>().AsMultiInstance(); var messageMapperFactory = new TinyIoCMessageMapperFactory(container); var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory); messageMapperRegistry.Add(typeof(TaskReminderCommand), typeof(TaskReminderCommandMessageMapper)); messageMapperRegistry.Add(typeof(TaskCompletedEvent), typeof(TaskCompletedEventMapper)); var commandProcessor = CommandProcessorBuilder .With() .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory)) .Policies(policyRegistry) .TaskQueues(new MessagingConfiguration(sqlMessageStore, gateway, messageMapperRegistry)) .RequestContextFactory(new InMemoryRequestContextFactory()) .Build(); container.Register <IAmACommandProcessor>(commandProcessor); }
public static MessageMapperRegistry MessageMapperRegistry(IServiceProvider provider) { var serviceCollectionMessageMapperRegistry = provider.GetService <ServiceCollectionMessageMapperRegistry>(); var messageMapperRegistry = new MessageMapperRegistry(new ServiceProviderMapperFactory(provider)); foreach (var messageMapper in serviceCollectionMessageMapperRegistry) { messageMapperRegistry.Add(messageMapper.Key, messageMapper.Value); } return(messageMapperRegistry); }
private CommandProcessor CommandProcessorRegistrar(TinyIoCContainer container, ILog logger) { //Database dao container.Register <ITasksDAO, TasksDAO>().AsSingleton(); //create handler var handlerFactory = new TinyIocHandlerFactory(container); var subscriberRegistry = new SubscriberRegistry(); container.Register <IHandleRequests <AddTaskCommand>, AddTaskCommandHandler>().AsMultiInstance(); subscriberRegistry.Register <AddTaskCommand, AddTaskCommandHandler>(); //complete handler container.Register <IHandleRequests <CompleteTaskCommand>, CompleteTaskCommandHandler>().AsMultiInstance(); subscriberRegistry.Register <CompleteTaskCommand, CompleteTaskCommandHandler>(); //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 container.Register <IAmAMessageMapper <TaskReminderCommand>, TaskReminderCommandMessageMapper>().AsMultiInstance(); var messageMapperFactory = new TinyIoCMessageMapperFactory(container); var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory); messageMapperRegistry.Add(typeof(TaskReminderCommand), typeof(TaskReminderCommandMessageMapper)); var ravenMessageStore = new RavenMessageStore(new EmbeddableDocumentStore().Initialize(), logger); var gateway = new RmqMessageProducer(logger); var commandProcessor = CommandProcessorBuilder.With() .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory)) .Policies(policyRegistry) .Logger(logger) .TaskQueues(new MessagingConfiguration(ravenMessageStore, gateway, messageMapperRegistry)) .RequestContextFactory(new InMemoryRequestContextFactory()) .Build(); return(commandProcessor); }
private static Dispatcher BuildDispatcher(IServiceProvider serviceProvider) { var commandProcessor = serviceProvider.GetService <IAmACommandProcessor>(); var options = serviceProvider.GetService <ServiceActivatorOptions>(); var dispatcherBuilder = DispatchBuilder.With().CommandProcessor(commandProcessor); var serviceCollectionMessageMapperRegistry = serviceProvider.GetService <ServiceCollectionMessageMapperRegistry>(); var messageMapperRegistry = new MessageMapperRegistry(new ServiceProviderMapperFactory(serviceProvider)); foreach (var messageMapper in serviceCollectionMessageMapperRegistry) { messageMapperRegistry.Add(messageMapper.Key, messageMapper.Value); } return(dispatcherBuilder.MessageMappers(messageMapperRegistry) .DefaultChannelFactory(options.ChannelFactory) .Connections(options.Connections).Build()); }
private void RegisterMessageMappersFromAssembly( IEnumerable <Assembly> assemblies, Assembly assembly, MessageMapperRegistry mapperRegistry) { assemblies = assemblies.Concat(new [] { assembly }); var mappers = from ti in assemblies.SelectMany(a => a.DefinedTypes).Distinct() where ti.IsClass && !ti.IsAbstract && !ti.IsInterface from i in ti.ImplementedInterfaces where i.GetTypeInfo().IsGenericType&& i.GetGenericTypeDefinition() == typeof(IAmAMessageMapper <>) select new { RequestType = i.GenericTypeArguments.First(), MapperType = ti.AsType() }; foreach (var mapper in mappers) { _container.Register(mapper.MapperType, mapper.MapperType, Lifestyle.Scoped); mapperRegistry.Add(mapper.RequestType, mapper.MapperType); } }
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); }