public void CreateHost_DoesNotChangePageStartFileHost() {
            // Arrange
            MvcWebRazorHostFactory factory = new MvcWebRazorHostFactory();

            // Act
            WebPageRazorHost result = factory.CreateHost("_pagestart.cshtml", null);

            // Assert
            Assert.IsNotInstanceOfType(result, typeof(MvcWebPageRazorHost));
        }
        public void CreateHost_ReplacesRegularHostWithMvcSpecificOne() {
            // Arrange
            MvcWebRazorHostFactory factory = new MvcWebRazorHostFactory();

            // Act
            WebPageRazorHost result = factory.CreateHost("foo.cshtml", null);

            // Assert
            Assert.IsInstanceOfType(result, typeof(MvcWebPageRazorHost));
        }
        public void CreateHost_DoesNotChangeAppStartFileHost()
        {
            // Arrange
            MvcWebRazorHostFactory factory = new MvcWebRazorHostFactory();

            // Act
            WebPageRazorHost result = factory.CreateHost("_appstart.cshtml", null);

            // Assert
            Assert.IsNotType<MvcWebPageRazorHost>(result);
        }
        public void CreateHost_DoesNotChangePageStartFileHost()
        {
            // Arrange
            MvcWebRazorHostFactory factory = new MvcWebRazorHostFactory();

            // Act
            WebPageRazorHost result = factory.CreateHost("_pagestart.cshtml", null);

            // Assert
            Assert.IsNotType <MvcWebPageRazorHost>(result);
        }
        public void CreateHost_ReplacesRegularHostWithMvcSpecificOne()
        {
            // Arrange
            MvcWebRazorHostFactory factory = new MvcWebRazorHostFactory();

            // Act
            WebPageRazorHost result = factory.CreateHost("foo.cshtml", null);

            // Assert
            Assert.IsType <MvcWebPageRazorHost>(result);
        }
        public void CreateHost_DoesNotChangeAppStartFileHost()
        {
            // Arrange
            MvcWebRazorHostFactory factory = new MvcWebRazorHostFactory();

            // Act
            WebPageRazorHost result = factory.CreateHost("_appstart.cshtml", null);

            // Assert
            Assert.IsNotInstanceOfType(result, typeof(MvcWebPageRazorHost));
        }
Пример #7
0
        private static Type CreateTypeForEmbeddedRazor(RequesterTypeAndResourcePath data)
        {
            // Getting razor code from resource.
            string code         = null;
            string resourceName = data.ResourcePath.Replace('\\', '.');

            using (var stream = data.RequesterType.Assembly.GetManifestResourceStream(resourceName))
                if (stream != null)
                {
                    using (var reader = new StreamReader(stream))
                        code = reader.ReadToEnd();
                }

            if (code == null)
            {
                throw new Exception("Resource was not found. Maybe it has not been embedded.");
            }

            var virtualPath = string.Format("~/{0}", data.ResourcePath.Replace('\\', '/'));
            var className   = resourceName.Replace('.', '_');

            // Creating compile unit, using Mvc Razor syntax.
            // These settings must match those of 'web.config' file, section 'system.web.webPages.razor'
            var factory = new MvcWebRazorHostFactory();
            var host    = factory.CreateHost(virtualPath, data.ResourcePath);

            host.DefaultPageBaseClass = typeof(CerebelloViewPage).FullName;
            host.NamespaceImports.Add("System.Web.Mvc");
            host.NamespaceImports.Add("System.Web.Mvc.Ajax");
            host.NamespaceImports.Add("System.Web.Mvc.Html");
            host.NamespaceImports.Add("System.Web.Routing");
            host.NamespaceImports.Add("CerebelloWebRole.Code");
            host.NamespaceImports.Add("CerebelloWebRole.Models");
            var engine = new RazorTemplateEngine(host);

            GeneratorResults results;

            using (TextReader reader = new StringReader(code))
                results = engine.GenerateCode(reader, className, rootNamespace: null, sourceFileName: host.PhysicalPath);

            if (!results.Success)
            {
                throw CreateExceptionFromParserError(results.ParserErrors.Last(), virtualPath);
            }

            // Compiling an assembly with the code.
            var codeProvider   = new CSharpCodeProvider();
            var compilerParams = new CompilerParameters
            {
                GenerateInMemory   = true,
                GenerateExecutable = false,
#if DEBUG
                IncludeDebugInformation = true,
#endif
            };

            // loading a required assembly, before creating the list of 'ReferencedAssemblies'
            // reference: http://razorengine.codeplex.com/discussions/242605
            if (typeof(Microsoft.CSharp.RuntimeBinder.Binder).Assembly == null)
            {
                throw new Exception("Could not load required assembly.");
            }

            compilerParams.ReferencedAssemblies.AddRange(
                AppDomain.CurrentDomain
                .GetAssemblies()
                .Where(a => !a.IsDynamic)
                .GroupBy(a => a.FullName)
                .Select(grp => grp.First())
                .Select(a => a.Location)
                .ToArray());

            var compilerResult = codeProvider.CompileAssemblyFromDom(compilerParams, results.GeneratedCode);

            // Returning the compiled type.
            var type = compilerResult.CompiledAssembly.GetTypes().Single(t => t.Name == className);

            return(type);
        }