public static RazorEngine CreateInstance(string baseType) { var configuration = RazorConfiguration.Default; var razorProjectEngine = RazorProjectEngine.Create(configuration, new NullRazorProjectFileSystem(), builder => { TkInjectDirective.Register(builder); TkModelDirective.Register(builder); if (!RazorLanguageVersion.TryParse("3.0", out var razorLanguageVersion) || configuration.LanguageVersion.CompareTo(razorLanguageVersion) < 0) { NamespaceDirective.Register(builder); FunctionsDirective.Register(builder); InheritsDirective.Register(builder); } SectionDirective.Register(builder); builder.Features.Add(new ModelExpressionPass()); builder.Features.Add(new RazorTemplateDocumentClassifierPass(baseType)); builder.Features.Add(new RazorAssemblyAttributeInjectionPass()); #if NETSTANDARD2_0 builder.Features.Add(new InstrumentationPass()); #endif builder.AddTargetExtension(new TemplateTargetExtension() { TemplateTypeName = "global::YJC.Toolkit.Razor.TkRazorHelperResult", }); OverrideRuntimeNodeWriterTemplateTypeNamePhase.Register(builder); }); return(razorProjectEngine.Engine); }
private RazorEngine GetRazorEngine() { var razorEngine = RazorEngine.Create(builder => { InjectDirective.Register(builder); ModelDirective.Register(builder); NamespaceDirective.Register(builder); PageDirective.Register(builder); FunctionsDirective.Register(builder); InheritsDirective.Register(builder); SectionDirective.Register(builder); ////builder.AddTargetExtension(new TemplateTargetExtension() ////{ //// TemplateTypeName = "global::Microsoft.AspNetCore.Mvc.Razor.HelperResult", ////}); ////builder.Features.Add(new SuppressChecksumOptionsFeature()); builder.Features.Add(new ModelExpressionPass()); builder.Features.Add(new PagesPropertyInjectionPass()); builder.Features.Add(new ViewComponentTagHelperPass()); builder.Features.Add(new RazorPageDocumentClassifierPass()); builder.Features.Add(new MvcViewDocumentClassifierPass2(RuntimeTemplatesNamespace, BaseViewName)); builder.Features.Add(new AssemblyAttributeInjectionPass2()); if (!builder.DesignTime) { //builder.Features.Add(new InstrumentationPass()); } }); return(razorEngine); }
public void NamespaceDirective_ParseTest() { TokenStream ts; string text = "@namespace foo \"www.foo.com\";"; ITextProvider tp = new StringTextProvider(text); ts = Helpers.MakeTokenStream(tp); NamespaceDirective pd = new NamespaceDirective(); Assert.IsTrue(pd.Parse(new ItemFactory(tp, null), tp, ts)); text = "@namespace foo;"; tp = new StringTextProvider(text); ts = Helpers.MakeTokenStream(tp); pd = new NamespaceDirective(); Assert.IsTrue(pd.Parse(new ItemFactory(tp, null), tp, ts)); text = "@namespace foo"; tp = new StringTextProvider(text); ts = Helpers.MakeTokenStream(tp); pd = new NamespaceDirective(); Assert.IsTrue(pd.Parse(new ItemFactory(tp, null), tp, ts)); text = "@namespace;"; tp = new StringTextProvider(text); ts = Helpers.MakeTokenStream(tp); pd = new NamespaceDirective(); Assert.IsTrue(pd.Parse(new ItemFactory(tp, null), tp, ts)); text = "@namespace { }"; tp = new StringTextProvider(text); ts = Helpers.MakeTokenStream(tp); pd = new NamespaceDirective(); Assert.IsTrue(pd.Parse(new ItemFactory(tp, null), tp, ts)); text = "@namespace"; tp = new StringTextProvider(text); ts = Helpers.MakeTokenStream(tp); pd = new NamespaceDirective(); Assert.IsTrue(pd.Parse(new ItemFactory(tp, null), tp, ts)); text = "@namespace 'www.microsoft.com'"; tp = new StringTextProvider(text); ts = Helpers.MakeTokenStream(tp); pd = new NamespaceDirective(); Assert.IsTrue(pd.Parse(new ItemFactory(tp, null), tp, ts)); text = "@namespace foo bar;"; tp = new StringTextProvider(text); ts = Helpers.MakeTokenStream(tp); pd = new NamespaceDirective(); Assert.IsTrue(pd.Parse(new ItemFactory(tp, null), tp, ts)); text = "@namespace foo url('www.microsoft.com');"; tp = new StringTextProvider(text); ts = Helpers.MakeTokenStream(tp); pd = new NamespaceDirective(); Assert.IsTrue(pd.Parse(new ItemFactory(tp, null), tp, ts)); }
public static RazorProjectEngine Create( RazorConfiguration configuration, RazorProjectFileSystem fileSystem, Action <RazorProjectEngineBuilder> configure) { if (fileSystem == null) { throw new ArgumentNullException(nameof(fileSystem)); } if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } var builder = new DefaultRazorProjectEngineBuilder(configuration, fileSystem); // The intialization order is somewhat important. // // Defaults -> Extensions -> Additional customization // // This allows extensions to rely on default features, and customizations to override choices made by // extensions. AddDefaultPhases(builder.Phases); AddDefaultFeatures(builder.Features); if (configuration.LanguageVersion.CompareTo(RazorLanguageVersion.Version_5_0) >= 0) { builder.Features.Add(new ViewCssScopePass()); } if (configuration.LanguageVersion.CompareTo(RazorLanguageVersion.Version_3_0) >= 0) { FunctionsDirective.Register(builder); ImplementsDirective.Register(builder); InheritsDirective.Register(builder); NamespaceDirective.Register(builder); AttributeDirective.Register(builder); AddComponentFeatures(builder, configuration.LanguageVersion); } LoadExtensions(builder, configuration.Extensions); configure?.Invoke(builder); return(builder.Build()); }
public void GetNamespace_IncompleteDirective_UsesEmptyNamespace() { // Arrange var source = "c:\\foo\\bar\\bleh.cshtml"; var imports = "c:\\foo\\baz\\bleh.cshtml"; var node = new DirectiveIntermediateNode() { Directive = NamespaceDirective.Directive, Source = new SourceSpan(imports, 0, 0, 0, 0), }; // Act var @namespace = NamespaceDirective.GetNamespace(source, node); // Assert Assert.Equal(string.Empty, @namespace); }
public void GetNamespace_ForRelatedFiles_ComputesNamespaceWithSuffix(string source, string imports, string expected) { // Arrange var node = new DirectiveIntermediateNode() { Directive = NamespaceDirective.Directive, Source = new SourceSpan(imports, 0, 0, 0, 0), }; node.Children.Add(new DirectiveTokenIntermediateNode() { Content = "Base" }); // Act var @namespace = NamespaceDirective.GetNamespace(source, node); // Assert Assert.Equal(expected, @namespace); }
public void GetNamespace_ForNonRelatedFiles_UsesNamespaceVerbatim(string source, string imports) { // Arrange var node = new DirectiveIntermediateNode() { Directive = NamespaceDirective.Directive, Source = new SourceSpan(imports, 0, 0, 0, 0), }; node.Children.Add(new DirectiveTokenIntermediateNode() { Content = "Base" }); // Act var @namespace = NamespaceDirective.GetNamespace(source, node); // Assert Assert.Equal("Base", @namespace); }
public void GetNamespace_EmptyDirective_UsesEmptyNamespace() { // Arrange var source = "c:\\foo\\bar\\bleh.cshtml"; var imports = "c:\\foo\\baz\\bleh.cshtml"; var node = new DirectiveIntermediateNode() { Directive = NamespaceDirective.Directive, Source = new SourceSpan(imports, 0, 0, 0, 0), }; node.Children.Add(new DirectiveTokenIntermediateNode() { Content = string.Empty }); // Act var @namespace = NamespaceDirective.GetNamespace(source, node); // Assert Assert.Equal(string.Empty, @namespace); }
public static void Register(RazorProjectEngineBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } FunctionsDirective.Register(builder); InjectDirective.Register(builder); ModelDirective.Register(builder); NamespaceDirective.Register(builder); PageDirective.Register(builder); InheritsDirective.Register(builder); SectionDirective.Register(builder); builder.Features.Add(new DefaultTagHelperDescriptorProvider()); builder.Features.Add(new ViewComponentTagHelperDescriptorProvider()); builder.AddTargetExtension(new ViewComponentTagHelperTargetExtension()); builder.AddTargetExtension(new TemplateTargetExtension() { TemplateTypeName = "global::Microsoft.AspNetCore.Mvc.Razor.HelperResult", }); builder.Features.Add(new ModelExpressionPass()); builder.Features.Add(new PagesPropertyInjectionPass()); builder.Features.Add(new ViewComponentTagHelperPass()); builder.Features.Add(new RazorPageDocumentClassifierPass()); builder.Features.Add(new MvcViewDocumentClassifierPass()); builder.Features.Add(new AssemblyAttributeInjectionPass()); builder.Features.Add(new InstrumentationPass()); builder.Features.Add(new MvcImportProjectFeature()); // The default C# language version for what this Razor configuration supports. builder.SetCSharpLanguageVersion(LanguageVersion.CSharp7_3); }