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); }