public CachedView GetView(string viewPath, string requestedPath, string area, object parameters = null)
        {
            parameters = parameters ?? new Dictionary <string, object>();
            Expander.ExpandView(viewPath, parameters, out string content);
            var cacheKey = GetCachedViewKey(requestedPath, area);

            if (!_parsedTemplateCache.TryGetValue(cacheKey, out CachedView cachedView) || cachedView.Raw != content)
            {
                if (cachedView == null)
                {
                    cachedView = new CachedView();
                    //save it for future
                    _parsedTemplateCache.TryAdd(cacheKey, cachedView);
                }
                try
                {
                    var template = Template.Parse(content);
                    cachedView.Template = template;
                    cachedView.Raw      = content;
                }
                catch (Exception ex)
                {
                    var newEx = new Exception($"Error occured while parsing file. File: {viewPath}", ex);
                    throw newEx;
                }
            }
            return(cachedView);
        }