public virtual async Task<TemplateResult> RunTemplateAsync([NotNull] string content,
            [NotNull] dynamic templateModel, CancellationToken cancellationToken = default(CancellationToken))
        {
            Check.NotNull(content, nameof(content));
            Check.NotNull(templateModel, nameof(templateModel));

            cancellationToken.ThrowIfCancellationRequested();

            var host = new RazorTemplatingHost(typeof(RazorReverseEngineeringBase));
            var engine = new RazorTemplateEngine(host);

            using (var reader = new StringReader(content))
            {
                var generatorResults = engine.GenerateCode(reader);

                if (!generatorResults.Success)
                {
                    var messages = generatorResults.ParserErrors.Select(e => e.Message);
                    return new TemplateResult
                    {
                        GeneratedText = string.Empty,
                        ProcessingException = new TemplateProcessingException(messages)
                    };
                }

                var references = _metadataReferencesProvider.GetApplicationReferences();
                var templateResult = _compilationService.Compile(
                    new List<string> { generatorResults.GeneratedCode }, references);
                if (templateResult.Messages.Any())
                {
                    return new TemplateResult
                    {
                        GeneratedText = string.Empty,
                        ProcessingException = new TemplateProcessingException(templateResult.Messages)
                    };
                }

                var compiledObject = Activator.CreateInstance(templateResult.CompiledType);
                var razorTemplate = compiledObject as RazorReverseEngineeringBase;

                var result = String.Empty;
                if (razorTemplate != null)
                {
                    razorTemplate.Model = templateModel;
                    razorTemplate.ModelUtilities = _modelUtilities;
                    razorTemplate.CSharpUtilities = _csharpUtiliies;
                    //ToDo: If there are errors executing the code, they are missed here.
                    result = await razorTemplate.ExecuteTemplateAsync(cancellationToken);
                }

                return new TemplateResult
                {
                    GeneratedText = result,
                    ProcessingException = null
                };
            }
        }
        public void Constructor_Sets_Base_Engine_Properties()
        {
            //Act
            var host = new RazorTemplatingHost(typeof(MyBaseType));

            //Assert
            Assert.Equal(typeof(MyBaseType).FullName, host.DefaultBaseClass);

            //Do not change these expected values unless the method names in RazorTemplateBase
            //changed.
            Assert.Equal("ExecuteAsync", host.GeneratedClassContext.ExecuteMethodName);
            Assert.Equal("Write", host.GeneratedClassContext.WriteMethodName);
            Assert.Equal("WriteLiteral", host.GeneratedClassContext.WriteLiteralMethodName);
            Assert.Equal("WriteTo", host.GeneratedClassContext.WriteToMethodName);
            Assert.Equal("WriteLiteralTo", host.GeneratedClassContext.WriteLiteralToMethodName);
            Assert.Equal("", host.GeneratedClassContext.TemplateTypeName);
        }
Esempio n. 3
0
        public void Constructor_Sets_Base_Engine_Properties()
        {
            //Act
            var host = new RazorTemplatingHost(typeof(MyBaseType));

            //Assert
            Assert.Equal(typeof(MyBaseType).FullName, host.DefaultBaseClass);

            //Do not change these expected values unless the method names in RazorTemplateBase
            //changed.
            Assert.Equal("ExecuteAsync", host.GeneratedClassContext.ExecuteMethodName);
            Assert.Equal("Write", host.GeneratedClassContext.WriteMethodName);
            Assert.Equal("WriteLiteral", host.GeneratedClassContext.WriteLiteralMethodName);
            Assert.Equal("WriteTo", host.GeneratedClassContext.WriteToMethodName);
            Assert.Equal("WriteLiteralTo", host.GeneratedClassContext.WriteLiteralToMethodName);
            Assert.Equal("", host.GeneratedClassContext.TemplateTypeName);
        }