/// <summary>
        /// Creates a lifetime scope which is shared by any downstream filters (rather than creating a new one).
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="lifetimeScope"></param>
        /// <param name="name">The name of the lifetime scope</param>
        public static void UseLifetimeScope(this IPipeConfigurator <ConsumeContext> configurator, ILifetimeScope lifetimeScope, string name = "message")
        {
            var scopeProvider = new AutofacConsumerScopeProvider(new SingleLifetimeScopeProvider(lifetimeScope), name);
            var specification = new FilterPipeSpecification <ConsumeContext>(new ScopeFilter(scopeProvider));

            configurator.AddPipeSpecification(specification);
        }
        /// <summary>
        /// Adds a filter to the send pipeline
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="configurator"></param>
        /// <param name="filter"></param>
        public static void UseSendFilter <T>(this ISendPipeConfigurator configurator, IFilter <SendContext <T> > filter)
            where T : class
        {
            var specification = new FilterPipeSpecification <SendContext <T> >(filter);

            configurator.AddPipeSpecification(specification);
        }
Esempio n. 3
0
        /// <summary>
        /// Creates a scope which is used by all downstream filters/consumers/etc.
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="serviceProvider"></param>
        public static void UseServiceScope(this IPipeConfigurator <ConsumeContext> configurator, IServiceProvider serviceProvider)
        {
            var scopeProvider = new DependencyInjectionConsumerScopeProvider(serviceProvider);
            var specification = new FilterPipeSpecification <ConsumeContext>(new ScopeConsumeFilter(scopeProvider));

            configurator.AddPipeSpecification(specification);
        }
Esempio n. 4
0
        public static void AddScopedFilter <TContext, T>(this IPipeConfigurator <TContext> configurator, Type scopedType,
                                                         IServiceProvider provider)
            where TContext : class, PipeContext
            where T : class
        {
            if (typeof(T).HasInterface <Fault>())
            {
                return;
            }

            if (!scopedType.IsGenericType || !scopedType.IsGenericTypeDefinition)
            {
                throw new ArgumentException("The scoped filter must be a generic type definition", nameof(scopedType));
            }

            var filterType = scopedType.MakeGenericType(typeof(T));

            if (!filterType.HasInterface(typeof(IFilter <TContext>)))
            {
                throw new ArgumentException($"The scoped filter must implement {TypeMetadataCache<IFilter<TContext>>.ShortName} ", nameof(scopedType));
            }

            var scopeProviderType = typeof(DependencyInjectionFilterContextScopeProvider <,>).MakeGenericType(filterType, typeof(TContext));

            var scopeProvider = (IFilterContextScopeProvider <TContext>)Activator.CreateInstance(scopeProviderType, provider);

            var filter        = new ScopedFilter <TContext>(scopeProvider);
            var specification = new FilterPipeSpecification <TContext>(filter);

            configurator.AddPipeSpecification(specification);
        }
        public override void CompensateActivityConfigured <TActivity, TLog>(ICompensateActivityConfigurator <TActivity, TLog> configurator)
        {
            var scopeProvider = new DependencyInjectionCompensateActivityScopeProvider <TActivity, TLog>(_serviceProvider);
            var scopeFilter   = new ScopeCompensateFilter <TActivity, TLog>(scopeProvider);
            var specification = new FilterPipeSpecification <CompensateContext <TLog> >(scopeFilter);

            configurator.Log(x => x.AddPipeSpecification(specification));
        }
Esempio n. 6
0
        public override void CompensateActivityConfigured <TActivity, TLog>(ICompensateActivityConfigurator <TActivity, TLog> configurator)
        {
            var scopeProvider = new AutofacCompensateActivityScopeProvider <TActivity, TLog>(_scopeProvider, _name, _configureScope);
            var scopeFilter   = new ScopeCompensateFilter <TActivity, TLog>(scopeProvider);
            var specification = new FilterPipeSpecification <CompensateContext <TLog> >(scopeFilter);

            configurator.Log(x => x.AddPipeSpecification(specification));
        }
        public override void ExecuteActivityConfigured <TActivity, TArguments>(IExecuteActivityConfigurator <TActivity, TArguments> configurator)
        {
            var scopeProvider = new DependencyInjectionExecuteActivityScopeProvider <TActivity, TArguments>(_serviceProvider);
            var scopeFilter   = new ScopeExecuteFilter <TActivity, TArguments>(scopeProvider);
            var specification = new FilterPipeSpecification <ExecuteContext <TArguments> >(scopeFilter);

            configurator.Arguments(x => x.AddPipeSpecification(specification));
        }
        public void MessageConfigured <TMessage>(IConsumePipeConfigurator configurator)
            where TMessage : class
        {
            var scopeFilter   = new ScopeMessageFilter <TMessage>(_scopeProvider);
            var specification = new FilterPipeSpecification <ConsumeContext <TMessage> >(scopeFilter);

            configurator.AddPipeSpecification(specification);
        }
Esempio n. 9
0
            public void ConsumerConfigured <TConsumer>(IConsumerConfigurator <TConsumer> configurator)
                where TConsumer : class
            {
                var filter        = new UnitOfWorkFilter <ConsumerConsumeContext <TConsumer>, TConsumer>();
                var specification = new FilterPipeSpecification <ConsumerConsumeContext <TConsumer> >(filter);

                configurator.AddPipeSpecification(specification);
            }
Esempio n. 10
0
        public override void ExecuteActivityConfigured <TActivity, TArguments>(IExecuteActivityConfigurator <TActivity, TArguments> configurator)
        {
            var scopeProvider = new AutofacExecuteActivityScopeProvider <TActivity, TArguments>(_scopeProvider, _name, _configureScope);
            var scopeFilter   = new ScopeExecuteFilter <TActivity, TArguments>(scopeProvider);
            var specification = new FilterPipeSpecification <ExecuteContext <TArguments> >(scopeFilter);

            configurator.Arguments(x => x.AddPipeSpecification(specification));
        }
Esempio n. 11
0
        public void ConsumerMessageConfigured <TConsumer, TMessage>(IConsumerMessageConfigurator <TConsumer, TMessage> configurator)
            where TConsumer : class
            where TMessage : class
        {
            // TODO
            var pipeSpec =
                new FilterPipeSpecification <ConsumeContext <TMessage> >(new ConsoleConsumeWithMessageFilter <TMessage>());

            _configurator.AddPipeSpecification(pipeSpec);
        }
        /// <summary>
        /// Adds a filter to the pipe
        /// </summary>
        /// <typeparam name="T">The context type</typeparam>
        /// <param name="configurator">The pipe configurator</param>
        /// <param name="filter">The filter to add</param>
        public static void UseFilter <T>(this IPipeConfigurator <T> configurator, IFilter <T> filter)
            where T : class, PipeContext
        {
            if (configurator == null)
            {
                throw new ArgumentNullException(nameof(configurator));
            }

            var pipeBuilderConfigurator = new FilterPipeSpecification <T>(filter);

            configurator.AddPipeSpecification(pipeBuilderConfigurator);
        }
Esempio n. 13
0
        /// <summary>
        /// Adds a filter to the publish pipe for the specific message type
        /// </summary>
        /// <typeparam name="T">The message type</typeparam>
        /// <param name="configurator">The pipe configurator</param>
        /// <param name="filter">The filter to add</param>
        public static void UseFilter <T>(this IPublishPipeConfigurator configurator, IFilter <PublishContext <T> > filter)
            where T : class
        {
            if (configurator == null)
            {
                throw new ArgumentNullException(nameof(configurator));
            }

            var specification = new FilterPipeSpecification <PublishContext <T> >(filter);

            configurator.AddPipeSpecification(specification);
        }
        public void MessageConfigured <TMessage>(IConsumePipeConfigurator configurator)
            where TMessage : class
        {
            var scopeProviderType =
                typeof(AutofacFilterContextScopeProvider <,>).MakeGenericType(_filterType.MakeGenericType(typeof(TMessage)),
                                                                              typeof(ConsumeContext <TMessage>));
            var scopeProvider = (IFilterContextScopeProvider <ConsumeContext <TMessage> >)Activator.CreateInstance(scopeProviderType, _lifetimeScopeProvider);
            var filter        = new ScopedFilter <ConsumeContext <TMessage> >(scopeProvider);
            var specification = new FilterPipeSpecification <ConsumeContext <TMessage> >(filter);

            configurator.AddPipeSpecification(specification);
        }
        public override void BatchConsumerConfigured <TConsumer, TMessage>(IConsumerMessageConfigurator <TConsumer, Batch <TMessage> > configurator)
        {
            var consumerSpecification = configurator as IConsumerMessageSpecification <TConsumer, Batch <TMessage> >;

            if (consumerSpecification == null)
            {
                throw new ArgumentException("The configurator must be a consumer specification");
            }

            var scopeFilter   = new ScopeMessageFilter <Batch <TMessage> >(_scopeProvider);
            var specification = new FilterPipeSpecification <ConsumeContext <Batch <TMessage> > >(scopeFilter);

            consumerSpecification.AddPipeSpecification(specification);
        }
Esempio n. 16
0
        /// <summary>
        /// Adds a filter to the pipe which is of a different type than the native pipe context type
        /// </summary>
        /// <typeparam name="TContext">The context type</typeparam>
        /// <typeparam name="TFilter">The filter context type</typeparam>
        /// <param name="configurator">The pipe configurator</param>
        /// <param name="filter">The filter to add</param>
        /// <param name="contextProvider"></param>
        /// <param name="inputContextProvider"></param>
        public static void UseFilter <TContext, TFilter>(this IPipeConfigurator <TContext> configurator, IFilter <TFilter> filter,
                                                         MergeFilterContextProvider <TContext, TFilter> contextProvider, FilterContextProvider <TFilter, TContext> inputContextProvider)
            where TContext : class, TFilter
            where TFilter : class, PipeContext
        {
            if (configurator == null)
            {
                throw new ArgumentNullException(nameof(configurator));
            }

            var pipeBuilderConfigurator = new FilterPipeSpecification <TContext, TFilter>(filter, contextProvider, inputContextProvider);

            configurator.AddPipeSpecification(pipeBuilderConfigurator);
        }
Esempio n. 17
0
        public void ConsumerMessageConfigured <TConsumer, TMessage>(IConsumerMessageConfigurator <TConsumer, TMessage> configurator)
            where TConsumer : class
            where TMessage : class
        {
            var scopeProviderType = typeof(DependencyInjectionFilterContextScopeProvider <,>)
                                    .MakeGenericType(_filterType.MakeGenericType(typeof(TMessage)), typeof(ConsumeContext <TMessage>));

            var scopeProvider = (IFilterContextScopeProvider <ConsumeContext <TMessage> >)Activator.CreateInstance(scopeProviderType, _serviceProvider);

            var filter        = new ScopedFilter <ConsumeContext <TMessage> >(scopeProvider);
            var specification = new FilterPipeSpecification <ConsumeContext <TMessage> >(filter);

            configurator.Message(m => m.AddPipeSpecification(specification));
        }
Esempio n. 18
0
        static void AddFilters <TActivity, TLog>(CompensateActivityPipeBuilder <TActivity, TLog> builders,
                                                 IPipeConfigurator <RequestContext <CompensateActivityContext <TActivity, TLog> > > h)
            where TActivity : class, CompensateActivity <TLog>
            where TLog : class
        {
            foreach (IFilter <CompensateActivityContext <TActivity, TLog> > filter in builders.Filters)
            {
                var filterSpecification = new FilterPipeSpecification <CompensateActivityContext <TActivity, TLog> >(filter);

                var pipeSpecification = new SplitFilterPipeSpecification
                                        <RequestContext <CompensateActivityContext <TActivity, TLog> >, CompensateActivityContext <TActivity, TLog> >(
                    filterSpecification, (input, context) => input, context => context.Request);

                h.AddPipeSpecification(pipeSpecification);
            }
        }
Esempio n. 19
0
        static void AddFilters <TActivity, TArguments>(ExecuteActivityPipeBuilder <TActivity, TArguments> builders,
                                                       IPipeConfigurator <RequestContext <ExecuteActivityContext <TActivity, TArguments> > > h)
            where TActivity : class, ExecuteActivity <TArguments>
            where TArguments : class
        {
            foreach (IFilter <ExecuteActivityContext <TActivity, TArguments> > filter in builders.Filters)
            {
                var filterSpecification = new FilterPipeSpecification <ExecuteActivityContext <TActivity, TArguments> >(filter);

                var pipeSpecification = new SplitFilterPipeSpecification
                                        <RequestContext <ExecuteActivityContext <TActivity, TArguments> >, ExecuteActivityContext <TActivity, TArguments> >(
                    filterSpecification, (input, context) => input, context => context.Request);

                h.AddPipeSpecification(pipeSpecification);
            }
        }
        /// <summary>
        /// Adds filters to the pipe
        /// </summary>
        /// <typeparam name="T">The context type</typeparam>
        /// <param name="configurator">The pipe configurator</param>
        /// <param name="filters">The filters to add</param>
        public static void UseFilters <T>(this IPipeConfigurator <T> configurator, params IFilter <T>[] filters)
            where T : class, PipeContext
        {
            if (configurator == null)
            {
                throw new ArgumentNullException(nameof(configurator));
            }
            if (filters == null)
            {
                throw new ArgumentNullException(nameof(filters));
            }

            foreach (IFilter <T> filter in filters)
            {
                var pipeBuilderConfigurator = new FilterPipeSpecification <T>(filter);

                configurator.AddPipeSpecification(pipeBuilderConfigurator);
            }
        }
        /// <summary>
        /// Adds a filter to the send pipeline
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="configurator"></param>
        /// <param name="filter"></param>
        public static void UseSendFilter(this ISendPipeConfigurator configurator, IFilter <SendContext> filter)
        {
            var specification = new FilterPipeSpecification <SendContext>(filter);

            configurator.AddPipeSpecification(specification);
        }