Example #1
0
        /// <summary>
        /// Load the consumer configuration from the specified Autofac LifetimeScope
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="scope">The LifetimeScope of the container</param>
        /// <param name="name">The name to use for the scope created for each message</param>
        public static void LoadFrom(this ISubscriptionBusServiceConfigurator configurator, ILifetimeScope scope,
                                    string name = "message")
        {
            IList <Type> concreteTypes = FindTypes <IConsumer>(scope, r => !r.Implements <ISaga>());

            if (concreteTypes.Count != 0)
            {
                var consumerConfigurator = new AutofacConsumerFactoryConfigurator(configurator, scope, name);

                foreach (Type concreteType in concreteTypes)
                {
                    consumerConfigurator.ConfigureConsumer(concreteType);
                }
            }

            IList <Type> sagaTypes = FindTypes <ISaga>(scope, x => true);

            if (sagaTypes.Count > 0)
            {
                var sagaConfigurator = new AutofacSagaRepositoryFactoryConfigurator(configurator, scope, name);

                foreach (Type type in sagaTypes)
                {
                    sagaConfigurator.ConfigureSaga(type);
                }
            }
        }
Example #2
0
        /// <summary>
        /// Registers a consumer given the lifetime scope specified
        /// </summary>
        /// <typeparam name="TConsumer">The consumer type</typeparam>
        /// <param name="configurator">The service bus configurator</param>
        /// <param name="scope">The LifetimeScope of the container</param>
        /// <param name="name">The name of the scope created per-message</param>
        /// <returns></returns>
        public static IConsumerSubscriptionConfigurator <TConsumer> Consumer <TConsumer>(
            this ISubscriptionBusServiceConfigurator configurator, ILifetimeScope scope, string name = "message")
            where TConsumer : class, IConsumer
        {
            var consumerFactory = new AutofacConsumerFactory <TConsumer>(scope, name);

            return(configurator.Consumer(consumerFactory));
        }
Example #3
0
        /// <summary>
        /// Registers a saga using the container that has the repository resolved from the container
        /// </summary>
        /// <typeparam name="TSaga"></typeparam>
        /// <param name="configurator"></param>
        /// <param name="scope"></param>
        /// <returns></returns>
        public static ISagaSubscriptionConfigurator <TSaga> Saga <TSaga>(
            this ISubscriptionBusServiceConfigurator configurator, ILifetimeScope scope, string name = "message")
            where TSaga : class, ISaga
        {
            var sagaRepository = scope.Resolve <ISagaRepository <TSaga> >();

            var autofacSagaRepository = new AutofacSagaRepository <TSaga>(sagaRepository, scope, name);

            return(configurator.Saga(autofacSagaRepository));
        }
        public static IInstanceSubscriptionConfigurator Instance(
            [NotNull] this ISubscriptionBusServiceConfigurator configurator,
            [NotNull] object instance)
        {
            var instanceConfigurator = new InstanceSubscriptionConfigurator(instance);

            var busServiceConfigurator = new SubscriptionBusServiceBuilderConfigurator(instanceConfigurator);

            configurator.AddConfigurator(busServiceConfigurator);

            return(instanceConfigurator);
        }
Example #5
0
        public static IHandlerSubscriptionConfigurator <T> Handler <T>(this ISubscriptionBusServiceConfigurator configurator,
                                                                       Action <IConsumeContext <T>, T> handler)
            where T : class
        {
            var handlerConfigurator = new HandlerSubscriptionConfigurator <T>(handler);

            var busServiceConfigurator = new SubscriptionBusServiceBuilderConfigurator(handlerConfigurator);

            configurator.AddConfigurator(busServiceConfigurator);

            return(handlerConfigurator);
        }
        public static IConsumerSubscriptionConfigurator <TConsumer> InterceptingConsumer <TConsumer>(
            [NotNull] this ISubscriptionBusServiceConfigurator configurator,
            [NotNull] IConsumerFactory <TConsumer> consumerFactory, [NotNull] Action <Action> interceptor)
            where TConsumer : class, IConsumer
        {
            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Subscribing Intercepting Consumer: {0} (using supplied consumer factory)",
                                 typeof(TConsumer));
            }

            var interceptingConsumerFactory = new InterceptingConsumerFactory <TConsumer>(consumerFactory, interceptor);

            return(configurator.Consumer(interceptingConsumerFactory));
        }
        public static IConsumerSubscriptionConfigurator <TConsumer> InterceptingConsumer <TConsumer>(
            [NotNull] this ISubscriptionBusServiceConfigurator configurator, [NotNull] Action <Action> interceptor)
            where TConsumer : class, IConsumer, new()
        {
            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Subscribing Intercepting Consumer: {0} (using default consumer factory)",
                                 typeof(TConsumer));
            }

            var delegateConsumerFactory = new DelegateConsumerFactory <TConsumer>(() => new TConsumer());

            var interceptingConsumerFactory = new InterceptingConsumerFactory <TConsumer>(delegateConsumerFactory,
                                                                                          interceptor);

            return(configurator.Consumer(interceptingConsumerFactory));
        }
        /// <summary>
        /// Configure a saga subscription
        /// </summary>
        /// <typeparam name="TSaga"></typeparam>
        /// <param name="configurator"></param>
        /// <param name="sagaRepository"></param>
        /// <returns></returns>
        public static ISagaSubscriptionConfigurator <TSaga> Saga <TSaga>(
            this ISubscriptionBusServiceConfigurator configurator, ISagaRepository <TSaga> sagaRepository)
            where TSaga : class, ISaga
        {
            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Subscribing Saga: {0}", typeof(TSaga));
            }

            var sagaConfigurator = new SagaSubscriptionConfigurator <TSaga>(sagaRepository);

            var busServiceConfigurator = new SubscriptionBusServiceBuilderConfigurator(sagaConfigurator);

            configurator.AddConfigurator(busServiceConfigurator);

            return(sagaConfigurator);
        }
        public static IConsumerSubscriptionConfigurator <TConsumer> Consumer <TConsumer>(
            [NotNull] this ISubscriptionBusServiceConfigurator configurator,
            [NotNull] IConsumerFactory <TConsumer> consumerFactory)
            where TConsumer : class, IConsumer
        {
            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Subscribing Consumer: {0} (using supplied consumer factory)", typeof(TConsumer));
            }

            var consumerConfigurator = new ConsumerSubscriptionConfigurator <TConsumer>(consumerFactory);

            var busServiceConfigurator = new SubscriptionBusServiceBuilderConfigurator(consumerConfigurator);

            configurator.AddConfigurator(busServiceConfigurator);

            return(consumerConfigurator);
        }
        public static IConsumerSubscriptionConfigurator <TConsumer> Consumer <TConsumer>(
            [NotNull] this ISubscriptionBusServiceConfigurator configurator)
            where TConsumer : class, IConsumer, new()
        {
            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Subscribing Consumer: {0} (using default consumer factory)", typeof(TConsumer));
            }

            var delegateConsumerFactory = new DelegateConsumerFactory <TConsumer>(() => new TConsumer());

            var consumerConfigurator = new ConsumerSubscriptionConfigurator <TConsumer>(delegateConsumerFactory);

            var busServiceConfigurator = new SubscriptionBusServiceBuilderConfigurator(consumerConfigurator);

            configurator.AddConfigurator(busServiceConfigurator);

            return(consumerConfigurator);
        }
        public static IConsumerSubscriptionConfigurator Consumer(
            [NotNull] this ISubscriptionBusServiceConfigurator configurator,
            [NotNull] Type consumerType,
            [NotNull] Func <Type, object> consumerFactory)
        {
            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Subscribing Consumer: {0} (by type, using object consumer factory)", consumerType);
            }

            var consumerConfigurator =
                (ISubscriptionBuilderConfigurator)
                FastActivator.Create(typeof(UntypedConsumerSubscriptionConfigurator <>),
                                     new[] { consumerType }, new object[] { consumerFactory });

            var busServiceConfigurator = new SubscriptionBusServiceBuilderConfigurator(consumerConfigurator);

            configurator.AddConfigurator(busServiceConfigurator);

            return(consumerConfigurator as IConsumerSubscriptionConfigurator);
        }
Example #12
0
 protected override void SubscribeLocalBus(ISubscriptionBusServiceConfigurator subscriptionBusServiceConfigurator)
 {
     subscriptionBusServiceConfigurator.LoadFrom(_container);
 }
Example #13
0
 public AutofacConsumerFactoryConfigurator(ISubscriptionBusServiceConfigurator configurator, ILifetimeScope scope, string name)
 {
     _scope        = scope;
     _name         = name;
     _configurator = configurator;
 }
Example #14
0
 protected abstract void SubscribeLocalBus(ISubscriptionBusServiceConfigurator subscriptionBusServiceConfigurator);