/// <summary>Prepares the template.</summary> /// <param name="assemblyPath">The assembly path.</param> /// <param name="typeName">Name of the type.</param> /// <param name="viewBag">The view bag.</param> /// <param name="templateCache">The template cache.</param> /// <param name="encoding">The encoding.</param> private TemplateBase PrepareTemplate(string assemblyPath, string typeName, DynamicViewBag viewBag, TemplateCache templateCache, TemplateEncoding encoding = TemplateEncoding.Html) { var type = GetTemplateType(assemblyPath, typeName); var templateInstance = Activator.CreateInstance(type); if (templateInstance is TemplateBase) { var template = (TemplateBase)templateInstance; template.Encoding = encoding; template.ViewBag = viewBag; template.TemplateResolver = tpl => { string tplAssemblyPath = templateCache.Get(tpl, template: null, timestamp: null); if (String.IsNullOrWhiteSpace(tplAssemblyPath)) { return(null); } var layoutType = GetTemplateType(tplAssemblyPath, templateNamespace + "." + tpl); return(Activator.CreateInstance(layoutType) as ITemplate); }; return(template); } throw new ArgumentException("Invalid template type!"); }
/// <summary>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</summary> public void Dispose() { if (appDomain != null) { try { AppDomain.Unload(appDomain); } catch { } appDomain = null; } if (templateCache != null) { if (persistTemplates) { var path = Path.Combine(templatePath, TEMPLATE_CACHE_FILE); using (var filestream = File.Open(path, FileMode.Create)) { var formatter = new BinaryFormatter(); formatter.Serialize(filestream, templateCache); } } else { foreach (var tpl in templateCache.CachedNames) { var file = templateCache.Get(tpl, template: null, timestamp: null); if (File.Exists(file)) { File.Delete(file); } } } } }