/// <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); }
/// <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); }
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)); }
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); }
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); }
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)); }
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); }
/// <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); }
/// <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); }
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)); }
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); } }
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); }