protected Stream PreProcessGetTemplateExtensions(ITemplateProviderExtension[] extensions, Stream stream)
        {
            // Handle any pre-processing extension
            if (extensions != null && extensions.Length > 0)
            {
                foreach (var extension in extensions.Where(e => e.SupportsGetTemplatePreProcessing))
                {
                    var temp = new MemoryStream();
                    stream.Seek(0, SeekOrigin.Begin);
                    stream.CopyTo(temp);

                    temp.Seek(0, SeekOrigin.Begin);
                    stream = extension.PreProcessGetTemplate(temp);
                    stream.Seek(0, SeekOrigin.Begin);
                }
            }

            return (stream);
        }
        protected ProvisioningTemplate PostProcessGetTemplateExtensions(ITemplateProviderExtension[] extensions, ProvisioningTemplate template)
        {
            ProvisioningTemplate result = template;

            // Handle any post-processing extension
            if (extensions != null && extensions.Length > 0)
            {
                foreach (var extension in extensions.Where(e => e.SupportsGetTemplatePostProcessing))
                {
                    result = extension.PostProcessGetTemplate(result);
                }
            }

            return (result);
        }
        /// <summary>
        /// This method is invoked before calling the formatter to serialize the template
        /// </summary>
        /// <param name="extensions">The list of custom extensions</param>
        /// <param name="template">The template to serialize</param>
        /// <returns>The template eventually updated by the custom extensions</returns>
        protected virtual ProvisioningTemplate PreProcessSaveTemplateExtensions(ITemplateProviderExtension[] extensions, ProvisioningTemplate template)
        {
            ProvisioningTemplate result = template;

            // Handle any pre-processing extension during Save
            if (extensions != null && extensions.Length > 0)
            {
                foreach (var extension in extensions.Where(e => e.SupportsSaveTemplatePreProcessing))
                {
                    result = extension.PreProcessSaveTemplate(result);
                }
            }

            return (result);
        }