public pMixinPartialCodeGeneratorResponse GeneratePartialCode(ICodeGeneratorContext codeGeneratorContext)
        {
            var stopwatch = Stopwatch.StartNew();

            try
            {
                _log.InfoFormat("GeneratePartialCode Begin [{0}]", codeGeneratorContext.Source.FileName);

                var logManager = new Log4NetInMemoryStreamAppenderManager();

                var pipelineState = new CreateCodeGenerationPipelineState(codeGeneratorContext);

                new pMixinPartialCodeGeneratorPipeline().PerformTask(pipelineState);

                return new pMixinPartialCodeGeneratorResponse
                       {
                           CodeGeneratorExecutionTime = stopwatch.Elapsed,
                           CreateCodeGeneratorPipelineState = pipelineState,
                           CodeGeneratorContext = codeGeneratorContext,
                           Errors = pipelineState.CodeGenerationErrors,
                           GeneratedCodeSyntaxTree = pipelineState.CodeBehindSyntaxTree,
                           LogMessages = logManager.GetRenderedLoggingEvents(LoggingVerbosity.All)
                       };
            }
            catch (Exception e)
            {
                _log.Error(string.Format("Unhandled exception generating [{0}]: {1}",
                    codeGeneratorContext.Source.FileName, e.Message), e);

                throw;
            }
            finally
            {
                _log.InfoFormat("GeneratePartialCode Complete [{0}] in [{1}] ms",
                    codeGeneratorContext.Source.FileName,
                    stopwatch.ElapsedMilliseconds);
            }
        }
        protected override void Establish_context()
        {
            //Note: _log4NetInMemoryStreamAppenderManager
            //must be initialized here, otherwise the TestBase
            //constructor will reinitialize the log4net environment
            _log4NetInMemoryStreamAppenderManager =
                new Log4NetInMemoryStreamAppenderManager();

            _log.Info(_logMessage);
        }