/// <summary> /// Build the pipeline based on the configuration /// </summary> /// <param name="server"></param> /// <param name="config"></param> public void BuildPipeline(IProcessingServer server, PipelineConfiguration config) { _logger.Write($"Setup Pipeline:{config}", Category.Log, LogLevel.Debug, "PipelineBuilder"); server.SetupPipeline(config.Id, s => { var rootCtx = GlobalConfiguration.Configuration.Resolve <IActivationContext>(); s.Register(() => { var pipeline = new EventPipeline(); foreach (var node in config.OutputHandlers) { var ctx = rootCtx.ChildContext(); var outputHandler = BuildHandler <IOutputHandler>(ctx, node); var converter = node.BuildDataFilter(); if (converter.Filters.Any(f => f.FilterType == Filters.FilterType.Property)) { outputHandler = new DataFilterDecorator(converter, outputHandler); } pipeline.AddHandler(outputHandler); } return(pipeline); }, config.Options); var inputHandler = BuildHandler <IInputHandler>(rootCtx.ChildContext(), config.InputHandler); s.Register(inputHandler); }); }
/// <summary> /// add a handler with a set of filters to the pipeline /// </summary> /// <param name="pipeline"></param> /// <param name="outputHandler"></param> /// <param name="filters"></param> public static void AddHandler(this IEventPipeline pipeline, IOutputHandler outputHandler, IEnumerable <string> filters) { var converter = filters.BuildDataFilter(); outputHandler = new DataFilterDecorator(converter, outputHandler); pipeline.AddHandler(outputHandler); }