Example #1
0
        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);
        }
Example #4
0
        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());
        }