/// <summary> /// Call to start the Host running. Follow by a calls to RenderTemplate to /// render individual templates. Call Stop when done. /// </summary> /// <returns>true or false - check ErrorMessage on false </returns> public virtual bool Start() { if (Engine == null) { if (UseAppDomain) { Engine = RazorEngineFactory <TBaseTemplateType> .CreateRazorHostInAppDomain(); } else { Engine = RazorEngineFactory <TBaseTemplateType> .CreateRazorHost(CodeProvider); } if (Engine == null) { SetError(RazorEngineFactory <TBaseTemplateType> .Current.ErrorMessage); return(false); } Engine.HostContainer = this; foreach (string Namespace in ReferencedNamespaces) { Engine.AddNamespace(Namespace); } foreach (string assembly in ReferencedAssemblies) { Engine.AddAssembly(assembly); } Engine.Configuration = Configuration; } return(true); }
/// <summary> /// Instance method that creates a RazorHost in a new AppDomain. /// This method requires that you keep the Factory around in /// order to keep the AppDomain alive and be able to unload it. /// </summary> /// <param name="codeProvider"></param> /// <returns></returns> public RazorEngine <TBaseTemplateType> GetRazorHostInAppDomain() { LocalAppDomain = CreateAppDomain(null); if (LocalAppDomain == null) { return(null); } /// Create the instance inside of the new AppDomain /// Note: remote domain uses local EXE's AppBasePath!!! RazorEngine <TBaseTemplateType> host = null; try { Assembly ass = Assembly.GetExecutingAssembly(); string AssemblyPath = ass.Location; var templateType = typeof(RazorEngine <TBaseTemplateType>); object instance = LocalAppDomain.CreateInstanceFrom(AssemblyPath, templateType.FullName, false, BindingFlags.Default, null, new object [] { null }, CultureInfo.CurrentCulture, null) .Unwrap(); host = instance as RazorEngine <TBaseTemplateType>; } catch (Exception ex) { ErrorMessage = ex.Message; return(null); } Assembly[] assemblies = LocalAppDomain.GetAssemblies(); var count = assemblies.Length; return(host); }