public LightRailServiceBus(LightRailConfiguration config, IMessageMapper mapper, MessageHandlerCollection messageHandlers, IDictionary <Type, string> staticRoutes) { this.ServiceLocator = config.ServiceLocator; this.MessageSerializer = config.MessageSerializerConstructor(); this.MessageMapper = mapper; this.MessageHandlers = messageHandlers; this.messageHandlerPipelinedBehaviors = config.PipelinedBehaviors.ToList(); // ensure MessageHandlerDispatchBehavior is added to the end this.messageHandlerPipelinedBehaviors.RemoveAll(x => x is MessageHandlerDispatchBehavior); this.messageHandlerPipelinedBehaviors.Add(new MessageHandlerDispatchBehavior()); this.compiledMessagePipeline = PipelinedBehavior.CompileMessageHandlerPipeline(this.messageHandlerPipelinedBehaviors); this.staticRoutes = staticRoutes; this.SubscriptionStorage = config.SubscriptionStorage; this.Transport = config.TransportConstructor(); this.Transport.MessageAvailable += (sender, messageAvailable) => OnMessageAvailable(messageAvailable); this.Transport.PoisonMessageDetected += (sender, poisonMessageDetected) => OnPoisonMessageDetected(poisonMessageDetected); this.startupActions.Add(() => this.Transport.Start()); if (config.SubscriptionMapping.Any()) { this.startupActions.Add(() => { if (this.SubscriptionStorage == null) { throw new InvalidConfigurationException("SubscriptionStorage is required when setting up subscriptions."); } foreach (var messageType in config.SubscriptionMapping) { if (config.MessageTypeConventions.IsMessageType(messageType)) { this.SubscriptionStorage.Subscribe(this.Transport.OriginatingAddress, new[] { messageType.FullName }); } } }); } }
public void AddPipelinedBehavior(PipelinedBehavior behavior) { this.PipelinedBehaviors.Add(behavior); }