Ejemplo n.º 1
0
        /// <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!");
        }
Ejemplo n.º 2
0
        /// <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);
                        }
                    }
                }
            }
        }