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