private static Stream CreateXmlCore <TTuple>(ActionFactory <TTuple> factory, Action <XmlWriterSettings> setup) where TTuple : Template <XmlWriter>
        {
            var          options = DelegateUtility.ConfigureAction(setup, OverrideDefaultSettings);
            Stream       output;
            MemoryStream tempOutput = null;

            try
            {
                tempOutput = new MemoryStream();
                using (XmlWriter writer = XmlWriter.Create(tempOutput, options))
                {
                    factory.GenericArguments.Arg1 = writer;
                    factory.ExecuteMethod();
                    writer.Flush();
                }
                tempOutput.Flush();
                tempOutput.Position = 0;
                output     = tempOutput;
                tempOutput = null;
            }
            catch (Exception ex)
            {
                List <object> parameters = new List <object>();
                parameters.AddRange(factory.GenericArguments.ToArray());
                parameters.Add(options);
                throw ExceptionUtility.Refine(new InvalidOperationException("There is an error in the XML document.", ex), factory.DelegateInfo, parameters.ToArray()).Unwrap();
            }
            finally
            {
                tempOutput?.Dispose();
            }
            return(output);
        }
Пример #2
0
        private static TimeMeasureProfiler WithActionCore <TTuple>(ActionFactory <TTuple> factory, Action <TimeMeasureOptions> setup) where TTuple : Template
        {
            var options    = setup.ConfigureOptions();
            var descriptor = options.MethodDescriptor?.Invoke() ?? new MethodDescriptor(factory.DelegateInfo);
            var profiler   = new TimeMeasureProfiler()
            {
                Member = descriptor.ToString(),
                Data   = descriptor.MergeParameters(options.RuntimeParameters ?? factory.GenericArguments.ToArray())
            };

            PerformTimeMeasuring(profiler, options, p => factory.ExecuteMethod());
            return(profiler);
        }
        private static Stream CreateStreamCore <TTuple>(ActionFactory <TTuple> factory, Action <StreamWriterOptions> setup = null) where TTuple : Template <StreamWriter>
        {
            var          options = setup.ConfigureOptions();
            Stream       output;
            MemoryStream tempOutput = null;

            try
            {
                tempOutput = new MemoryStream(options.BufferSize);
                StreamWriter writer = new InternalStreamWriter(tempOutput, options);
                {
                    factory.GenericArguments.Arg1 = writer;
                    factory.ExecuteMethod();
                    writer.Flush();
                }
                tempOutput.Flush();
                tempOutput.Position = 0;
                output     = tempOutput;
                tempOutput = null;
            }
            catch (Exception ex)
            {
                List <object> parameters = new List <object>();
                parameters.AddRange(factory.GenericArguments.ToArray());
                parameters.Add(options);
                throw ExceptionUtility.Refine(new InvalidOperationException("There is an error in the Stream being written.", ex), factory.DelegateInfo, parameters.ToArray()).Unwrap();
            }
            finally
            {
                if (tempOutput != null)
                {
                    tempOutput.Dispose();
                }
            }
            return(output);
        }