public bool Inspect <TComponent, TMessage>(CorrelatedSagaMessageSink <TComponent, TMessage> sink) where TMessage : class, CorrelatedBy <Guid> where TComponent : class, Consumes <TMessage> .All, ISaga { string policyDescription = GetPolicy(sink.Policy); Append(string.Format("{0} Saga {1} ({2})", policyDescription, GetComponentName <TComponent>(), GetMessageName <TMessage>())); return(true); }
protected override ISagaMessageSink <TSaga, TMessage> CreateSink(ISagaRepository <TSaga> repository, ISagaPolicy <TSaga, TMessage> policy) { var sink = new CorrelatedSagaMessageSink <TSaga, TMessage>(repository, policy); if (sink == null) { throw new ConfigurationException("Could not build the initiating message sink for " + typeof(TSaga).FullName); } return(sink); }
public bool Inspect <TComponent, TMessage>(CorrelatedSagaMessageSink <TComponent, TMessage> sink) where TMessage : class, CorrelatedBy <Guid> where TComponent : class, Consumes <TMessage> .All, ISaga { Type componentType = typeof(TComponent); string componentName = componentType.IsGenericType ? componentType.GetGenericTypeDefinition().FullName : componentType.FullName; string policyDescription = GetPolicy(sink.Policy); Append(string.Format("{0} Saga {1} ({2})", policyDescription, componentName, typeof(TMessage).Name)); return(true); }
protected virtual UnsubscribeAction Connect <TComponent, TMessage>(ISubscriberContext context) where TMessage : class, CorrelatedBy <Guid> where TComponent : class, Orchestrates <TMessage>, ISaga { MessageRouterConfigurator routerConfigurator = MessageRouterConfigurator.For(context.Pipeline); var router = routerConfigurator.FindOrCreate <TMessage>(); var repository = context.Builder.GetInstance <ISagaRepository <TComponent> >(); var policy = new ExistingSagaPolicy <TComponent, TMessage>(x => false); var sink = new CorrelatedSagaMessageSink <TComponent, TMessage>(context, context.Data as IServiceBus, repository, policy); if (sink == null) { throw new ConfigurationException("Could not build the message sink for " + typeof(TComponent).FullName); } var result = router.Connect(sink); UnsubscribeAction remove = context.SubscribedTo <TMessage>(); return(() => result() && (router.SinkCount == 0) && remove()); }