/// <summary> /// The default <see cref="IPipeline"/> factory function. /// This looks for a 'PipelineOptions' configuration item and uses /// that to build the pipeline. /// </summary> /// <param name="config"> /// The application configuration object /// </param> /// <param name="pipelineBuilder"> /// a pipeline builder instance to use when constructing the /// <see cref="IPipeline"/>. /// </param> /// <returns> /// A new <see cref="IPipeline"/> instance /// </returns> private static IPipeline CreatePipelineFromConfig( IConfiguration config, IPipelineBuilderFromConfiguration pipelineBuilder) { // Get Pipeline options to check that it is present PipelineOptions options = new PipelineOptions(); config.Bind("PipelineOptions", options); if (options == null || options.Elements == null || options.Elements.Count == 0) { throw new PipelineConfigurationException( Messages.ExceptionNoConfiguration); } PipelineWebIntegrationOptions webOptions = new PipelineWebIntegrationOptions(); config.Bind("PipelineWebIntegrationOptions", webOptions); // Add the sequence element. AddSequenceElement(options); if (webOptions.ClientSideEvidenceEnabled) { // Client-side evidence is enabled so make sure the // JsonBuilderElement and JavaScriptBundlerElement has been // included. AddJsElements(options); } // Add the SetHeaders element AddSetHeadersElement(options); return(pipelineBuilder.BuildFromConfiguration(options)); }
/// <summary> /// The default <see cref="IPipeline"/> factory function. /// This looks for a 'PipelineOptions' configuration item and uses /// that to build the pipeline. /// </summary> /// <param name="config"> /// The application configuration object /// </param> /// <param name="pipelineBuilder"> /// a pipeline builder instance to use when constructing the /// <see cref="IPipeline"/>. /// </param> /// <returns> /// A new <see cref="IPipeline"/> instance /// </returns> private static IPipeline CreatePipelineFromConfig( IConfiguration config, IPipelineBuilderFromConfiguration pipelineBuilder) { // Get Pipeline options to check that it is present PipelineOptions options = new PipelineOptions(); config.Bind("PipelineOptions", options); if (options == null || options.Elements == null || options.Elements.Count == 0) { throw new PipelineConfigurationException( Messages.ExceptionNoConfiguration); } PipelineWebIntegrationOptions webOptions = new PipelineWebIntegrationOptions(); config.Bind("PipelineWebIntegrationOptions", webOptions); // Add the sequence element. var sequenceConfig = options.Elements.Where(e => e.BuilderName.Contains(nameof(SequenceElement), StringComparison.OrdinalIgnoreCase)); if (sequenceConfig.Any() == false) { // The sequence element is not included so add it. // Make sure it's added as the first element. options.Elements.Insert(0, new ElementOptions() { BuilderName = nameof(SequenceElement) }); } if (webOptions.ClientSideEvidenceEnabled) { // Client-side evidence is enabled so make sure the // JsonBuilderElement and JavaScriptBundlerElement has been // included. var jsonConfig = options.Elements.Where(e => e.BuilderName.Contains(nameof(JsonBuilderElement), StringComparison.OrdinalIgnoreCase)); var javascriptConfig = options.Elements.Where(e => e.BuilderName.Contains(nameof(JavaScriptBuilderElement), StringComparison.OrdinalIgnoreCase)); var jsIndex = javascriptConfig.Any() ? options.Elements.IndexOf(javascriptConfig.First()) : -1; if (jsonConfig.Any() == false) { // The json builder is not included so add it. var newElementOptions = new ElementOptions() { BuilderName = nameof(JsonBuilderElement) }; if (jsIndex > -1) { // There is already a javascript builder element // so insert the json builder before it. options.Elements.Insert(jsIndex, newElementOptions); } else { options.Elements.Add(newElementOptions); } } if (jsIndex == -1) { // The builder is not included so add it. options.Elements.Add(new ElementOptions() { BuilderName = nameof(JavaScriptBuilderElement), BuildParameters = new Dictionary <string, object>() { { "EnableCookies", true } } }); } } return(pipelineBuilder.BuildFromConfiguration(options)); }