internal static IBus Build(BusBuilderConfiguration busBuilderConfiguration) { var builder = new ContainerBuilder(); RegisterConfiguration(builder, busBuilderConfiguration); RegisterMessageProcessors(builder, busBuilderConfiguration); builder.RegisterType<Bus>() .AsImplementedInterfaces() .FindConstructorsWith( new DefaultConstructorFinder( type => type.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance))) .SingleInstance(); builder.RegisterType<QueueMessageSender>().AsImplementedInterfaces(); builder.RegisterType<TopicMessageSender>().AsImplementedInterfaces(); builder.RegisterType<QueueMessageDispatcher>().AsImplementedInterfaces(); builder.RegisterType<SubscriptionMessageDispatcher>().AsImplementedInterfaces(); builder.RegisterType<BrokeredMessageFactory>().AsImplementedInterfaces(); builder.RegisterType<QueueManager>().AsImplementedInterfaces().SingleInstance(); builder.RegisterType<TopicManager>().AsImplementedInterfaces().SingleInstance(); builder.RegisterType<MessageFactoryFactory>().AsImplementedInterfaces(); builder.RegisterType<NamespaceManagerFactory>().AsImplementedInterfaces(); builder.Register( context => MessagingFactory.CreateFromConnectionString(busBuilderConfiguration.ConnectionString)) .AsSelf() .SingleInstance(); builder.Register( context => NamespaceManager.CreateFromConnectionString(busBuilderConfiguration.ConnectionString)) .AsSelf() .SingleInstance(); builder.RegisterType<SimpleEndpointNamingPolicy>().AsImplementedInterfaces(); builder.RegisterType<JsonSerializer>().AsImplementedInterfaces(); builder.RegisterType<SubscriptionManager>().AsImplementedInterfaces().SingleInstance(); IContainer container = builder.Build(); var bus = container.Resolve<IBus>(); return bus; }
private static void RegisterMessageProcessors(ContainerBuilder builder, BusBuilderConfiguration busBuilderConfiguration) { builder.RegisterInstance(busBuilderConfiguration.QueueMessageHandlers).As<IQueueMessageHandlerManager>().SingleInstance(); builder.RegisterInstance(busBuilderConfiguration.SubscriptionMessageHandlers).As<ISubscriptionMessageHandlerManager>().SingleInstance(); }
private static void RegisterConfiguration(ContainerBuilder builder, BusBuilderConfiguration busBuilderConfiguration) { builder.RegisterInstance(busBuilderConfiguration.ConnectionString); builder.RegisterInstance(busBuilderConfiguration.MaxConcurrentReceiverCalls); builder.RegisterInstance(busBuilderConfiguration.Logger).As<ILogger>().SingleInstance(); }