Skip to content

Allow Template selection to be context aware (ASP.NET DisplayMode) #470

@SpeedyStuart

Description

@SpeedyStuart

Problem:
I need to be able to use different liquid templates based on runtime information (cookie, user-agent, etc.). Similar to DisplayMode in ASP.NET.

Whilst it is possible to provide a custom File Provider which contains this logic and returns appropriate templates, the Template Cache in FluidViewRenderer just caches templates based on path - so renders my logic useless.

Possible change

  • Add a new delegate to FluidViewEngineOptions that takes the template path and returns a Template Cache key (string)
  • Use this delegate (if present) in GetFluidTemplateAsync to generate the key for each template in the Template Cache

e.g.

// Allow templates to be cached by external factors
// Typically the rule would match any rules in custom IFileProvider implementations
// e.g. Serve different templates based on Authentication status / User Agent etc.
string cacheKey = path;
if (_fluidViewEngineOptions.TemplateCacheKeyProvider!=null)
{
    cacheKey = _fluidViewEngineOptions.TemplateCacheKeyProvider.Invoke(path);
}

if (cache.TemplateCache.TryGetValue(cacheKey, out var template))
{
    return template;
}

template = await ParseLiquidFileAsync(path, fileProvider, includeViewStarts);

cache.TemplateCache[cacheKey] = template;

return template;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions