Пример #1
0
        protected virtual UnsubscribeAction Connect <TComponent, TMessage>(ISubscriberContext context)
            where TMessage : class
            where TComponent : class, Observes <TMessage, TComponent>, ISaga
        {
            MessageRouterConfigurator routerConfigurator = MessageRouterConfigurator.For(context.Pipeline);

            var router = routerConfigurator.FindOrCreate <TMessage>();

            var instance = (Observes <TMessage, TComponent>) FastActivator <TComponent> .Create(Guid.Empty);

            Expression <Func <TComponent, TMessage, bool> > selector = instance.GetBindExpression();

            var repository = context.Builder.GetInstance <ISagaRepository <TComponent> >();
            var policy     = new ExistingSagaPolicy <TComponent, TMessage>(x => false);
            var sink       = new PropertySagaMessageSink <TComponent, TMessage>(context, context.Data as IServiceBus, repository, policy, selector);

            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());
        }
Пример #2
0
        protected override ISagaMessageSink <TSaga, TMessage> CreateSink(ISagaRepository <TSaga> repository,
                                                                         ISagaPolicy <TSaga, TMessage> policy)
        {
            var sink = new PropertySagaMessageSink <TSaga, TMessage>(repository, policy, _selector);

            if (sink == null)
            {
                throw new ConfigurationException("Could not build the message sink for " + typeof(TSaga).FullName);
            }

            return(sink);
        }
Пример #3
0
        public bool Inspect <TComponent, TMessage>(PropertySagaMessageSink <TComponent, TMessage> sink)
            where TMessage : class
            where TComponent : class, Consumes <TMessage> .All, ISaga
        {
            string policyDescription = GetPolicy(sink.Policy);
            string expression        = sink.Selector.ToString();

            Append(string.Format("{0} Saga {1} ({2}): {3}", policyDescription, GetComponentName <TComponent>(),
                                 GetMessageName <TMessage>(), expression));

            return(true);
        }
Пример #4
0
        public bool Inspect <TComponent, TMessage>(PropertySagaMessageSink <TComponent, TMessage> sink)
            where TMessage : class
            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);
            string expression        = sink.Selector.ToString();

            Append(string.Format("{0} Saga {1} ({2}): {3}", policyDescription, componentName, typeof(TMessage).Name, expression));

            return(true);
        }