/// <summary> /// Compiles the view and returns a function that can be invoked repeatedly. The function builds full control tree and activates the page. /// </summary> public virtual CSharpCompilation CompileView(IReader reader, string fileName, CSharpCompilation compilation, string namespaceName, string className) { // parse the document var tokenizer = new DothtmlTokenizer(); tokenizer.Tokenize(reader); var parser = new DothtmlParser(); var node = parser.Parse(tokenizer.Tokens); var resolvedView = controlTreeResolver.ResolveTree(node, fileName); var styleVisitor = new StylingVisitor(configuration.Styles); resolvedView.Accept(styleVisitor); var emitter = new DefaultViewCompilerCodeEmitter(); var compilingVisitor = new ViewCompilingVisitor(emitter, configuration.ServiceLocator.GetService <IBindingCompiler>(), className, b => configuration.ServiceLocator.GetService <IBindingIdGenerator>().GetId(b, fileName)); resolvedView.Accept(compilingVisitor); return(AddToCompilation(compilation, emitter, fileName, namespaceName, className)); }
/// <summary> /// Compiles the view and returns a function that can be invoked repeatedly. The function builds full control tree and activates the page. /// </summary> public IControlBuilder CompileView(IReader reader, string fileName, string assemblyName, string namespaceName, string className) { // parse the document var tokenizer = new DothtmlTokenizer(); tokenizer.Tokenize(reader); var parser = new DothtmlParser(); var node = parser.Parse(tokenizer.Tokens); var resolvedView = controlTreeResolver.ResolveTree(node, fileName); var styleVisitor = new StylingVisitor(configuration.Styles); resolvedView.Accept(styleVisitor); var emitter = new DefaultViewCompilerCodeEmitter(); var compilingVisitor = new ViewCompilingVisitor(emitter, configuration.ServiceLocator.GetService<IBindingCompiler>(), className); resolvedView.Accept(compilingVisitor); // create the assembly var assembly = BuildAssembly(emitter, assemblyName, namespaceName, className); var controlBuilder = (IControlBuilder)assembly.CreateInstance(namespaceName + "." + className); resolvedView.Metadata.ControlBuilderType = controlBuilder.GetType(); return controlBuilder; }