public virtual RazorLightEngine Build()
        {
            var options = new RazorLightOptions();

            if (namespaces != null)
            {
                options.Namespaces = namespaces;
            }

            if (dynamicTemplates != null)
            {
                options.DynamicTemplates = dynamicTemplates;
            }

            if (metadataReferences != null)
            {
                options.AdditionalMetadataReferences = metadataReferences;
            }

            if (prerenderCallbacks != null)
            {
                options.PreRenderCallbacks = prerenderCallbacks;
            }

            var sourceGenerator          = new RazorSourceGenerator(DefaultRazorEngine.Instance, project, options.Namespaces);
            var metadataReferenceManager = new DefaultMetadataReferenceManager(options.AdditionalMetadataReferences);

            var assembly = operatingAssembly ?? Assembly.GetEntryAssembly();

            var compiler = new RoslynCompilationService(metadataReferenceManager, assembly);
            var templateFactoryProvider = new TemplateFactoryProvider(sourceGenerator, compiler, options);

            return(new RazorLightEngine(options, templateFactoryProvider, cachingProvider));
        }
Ejemplo n.º 2
0
        private TemplateFactoryProvider GetProvider()
        {
            var sourceGenerator    = new RazorSourceGenerator(DefaultRazorEngine.Instance, project);
            var metadataReferences = new DefaultMetadataReferenceManager();
            var compiler           = new RoslynCompilationService(metadataReferences, Assembly.GetEntryAssembly());

            var provider = new TemplateFactoryProvider(sourceGenerator, compiler, new RazorLightOptions());

            return(provider);
        }
Ejemplo n.º 3
0
        private int Execute()
        {
            if (!ParseArguments())
            {
                return(1);
            }

            var engine = new EngineFactory().ForFileSystem(Options.ContentRootOption.Value());

            factoryProvider = (TemplateFactoryProvider)engine.TemplateFactoryProvider;
            compiler        = factoryProvider.Compiler;

            ViewCompilationInfo[] results = GenerateCode();
            bool success = true;

            foreach (var result in results)
            {
                if (result.CSharpDocument.Diagnostics.Count > 0)
                {
                    success = false;
                    foreach (var error in result.CSharpDocument.Diagnostics)
                    {
                        Application.Error.WriteLine($"{result.TemplateFileInfo.FullPath} ({error.Span.LineIndex}): {error.GetMessage()}");
                    }
                }
            }

            if (!success)
            {
                return(1);
            }

            string            precompileAssemblyName = $"{Options.ApplicationName}_Precompiled";
            CSharpCompilation compilation            = CompileViews(results, precompileAssemblyName);

            string     assemblyPath = Path.Combine(Options.OutputPath, precompileAssemblyName + ".dll");
            EmitResult emitResult   = EmitAssembly(
                compilation,
                compiler.EmitOptions,
                assemblyPath);

            if (!emitResult.Success)
            {
                foreach (var diagnostic in emitResult.Diagnostics)
                {
                    Application.Error.WriteLine(CSharpDiagnosticFormatter.Instance.Format(diagnostic));
                }

                return(1);
            }

            return(0);
        }
Ejemplo n.º 4
0
        /// <summary>
        ///Creates RazorLightEngine with a custom RazorLightProject
        /// </summary>
        /// <param name="project">The project</param>
        /// <returns>Instance of RazorLightEngine</returns>
        public virtual RazorLightEngine Create(RazorLightProject project, RazorLightOptions options = null)
        {
            var razorOptions = options ?? new RazorLightOptions();

            var sourceGenerator = new RazorSourceGenerator(DefaultRazorEngine.Instance, project, razorOptions.Namespaces);

            var metadataReferenceManager = new DefaultMetadataReferenceManager(razorOptions.AdditionalMetadataReferences);
            var compiler = new RoslynCompilationService(metadataReferenceManager, Assembly.GetEntryAssembly());
            var templateFactoryProvider = new TemplateFactoryProvider(sourceGenerator, compiler, razorOptions);

            ICachingProvider cacheProvider = new MemoryCachingProvider();

            return(new RazorLightEngine(razorOptions, templateFactoryProvider, cacheProvider));
        }
Ejemplo n.º 5
0
        public void Ensure_FactoryReturnsValidTemplateType()
        {
            string templateKey = "testKey";

            var templateFactoryProvider = new TemplateFactoryProvider();
            var descriptor = new CompiledTemplateDescriptor
            {
                TemplateAttribute = new RazorLightTemplateAttribute(templateKey, typeof(TestFactoryClass)),
                TemplateKey       = templateKey
            };

            Func <ITemplatePage> result = templateFactoryProvider.CreateFactory(descriptor);

            Assert.NotNull(result);
            Assert.IsAssignableFrom <TemplatePage>(result());
        }
Ejemplo n.º 6
0
        public virtual RazorLightEngine Build()
        {
            options = options ?? new RazorLightOptions();
            project = project ?? new NoRazorProject();

            if (namespaces != null)
            {
                if (namespaces.Count > 0 && options.Namespaces.Count > 0)
                {
                    ThrowIfHasBeenSetExplicitly(nameof(namespaces));
                }

                options.Namespaces = namespaces;
            }

            if (dynamicTemplates != null)
            {
                if (dynamicTemplates.Count > 0 && options.DynamicTemplates.Count > 0)
                {
                    ThrowIfHasBeenSetExplicitly(nameof(dynamicTemplates));
                }

                options.DynamicTemplates = dynamicTemplates;
            }

            if (metadataReferences != null)
            {
                if (metadataReferences.Count > 0 && options.AdditionalMetadataReferences.Count > 0)
                {
                    ThrowIfHasBeenSetExplicitly(nameof(metadataReferences));
                }

                options.AdditionalMetadataReferences = metadataReferences;
            }

            if (excludedAssemblies != null)
            {
                if (excludedAssemblies.Count > 0 && options.ExcludedAssemblies.Count > 0)
                {
                    ThrowIfHasBeenSetExplicitly(nameof(excludedAssemblies));
                }

                options.ExcludedAssemblies = excludedAssemblies;
            }

            if (prerenderCallbacks != null)
            {
                if (prerenderCallbacks.Count > 0 && options.PreRenderCallbacks.Count > 0)
                {
                    ThrowIfHasBeenSetExplicitly(nameof(prerenderCallbacks));
                }

                options.PreRenderCallbacks = prerenderCallbacks;
            }

            if (cachingProvider != null)
            {
                if (options.CachingProvider != null)
                {
                    ThrowIfHasBeenSetExplicitly(nameof(cachingProvider));
                }

                options.CachingProvider = cachingProvider;
            }

            if (disableEncoding.HasValue)
            {
                if (options.DisableEncoding != null)
                {
                    ThrowIfHasBeenSetExplicitly(nameof(disableEncoding));
                }

                options.DisableEncoding = options.DisableEncoding ?? disableEncoding ?? false;
            }
            else
            {
                if (!options.DisableEncoding.HasValue)
                {
                    options.DisableEncoding = false;
                }
            }

            if (enableDebugMode.HasValue && options.EnableDebugMode.HasValue)
            {
                ThrowIfHasBeenSetExplicitly(nameof(enableDebugMode));
            }
            else
            {
                options.EnableDebugMode = options.EnableDebugMode ?? enableDebugMode ?? false;
            }

            var metadataReferenceManager = new DefaultMetadataReferenceManager(options.AdditionalMetadataReferences, options.ExcludedAssemblies);
            var assembly = operatingAssembly ?? Assembly.GetEntryAssembly();
            var compiler = new RoslynCompilationService(metadataReferenceManager, assembly);

            var sourceGenerator         = new RazorSourceGenerator(DefaultRazorEngine.Instance, project, options.Namespaces);
            var templateCompiler        = new RazorTemplateCompiler(sourceGenerator, compiler, project, options);
            var templateFactoryProvider = new TemplateFactoryProvider();

            var engineHandler = new EngineHandler(options, templateCompiler, templateFactoryProvider, cachingProvider);

            return(new RazorLightEngine(engineHandler));
        }