Skip to content

Instantly share code, notes, and snippets.

@gognjanovski
Created February 2, 2019 09:59
Show Gist options
  • Save gognjanovski/e4f432a9ad70a57cd32bda59afc1411f to your computer and use it in GitHub Desktop.
Save gognjanovski/e4f432a9ad70a57cd32bda59afc1411f to your computer and use it in GitHub Desktop.
...
public string UsingTemplateFromEmbedded<T>(string path, T model)
{
// Generate the template name
string templateName = GetTemplateName(path);
string template = memoryCache.Get<string>(templateName);
if(string.IsNullOrEmpty(template))
{
// Locking this resource is necessary since there are parallel requests to this methnod
// and we need to cache it only once
lock (__lockObj)
{
template = memoryCache.GetOrCreate(templateName, f =>
{
string resource = EmbeddedResourceHelper.GetResourceAsString(_assembly, GenerateFileAssemblyPath(path, _assembly));
return resource;
});
}
}
var result = Parse(templateName, template, model);
return result;
}
...
private async Task<string> ParseAsync<T>(string templateName, string template, T model)
{
var project = new InMemoryRazorLightProject();
var engine = new EngineFactory().Create(project);
//We need to set the templateName as unique Key for caching the template
return await engine.CompileRenderAsync<T>(templateName, template, model);
}
...
//This function is generating the template cache key from the template path
private string GetTemplateName(string path)
{
return string.IsNullOrEmpty(path) ? "" : path.Replace(".", "");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment