我正在尝试编写两个用于在剃刀视图中本地化字符串的Tag帮助程序。父标记的目的是收集子标记所请求的所有密钥,并在一个批处理中从数据库中获取它们并缓存它们。
然后子标签将使用缓存版本,这样我希望降低数据库的负载。我正在寻找这样的东西:
<parent-tag>
<child-tag key="Hello" />
some HTML here
<child-tag key="Hi!" />
</parent-tag>
我希望能够在Parent标记的Invoke方法中获取对象列表。
我也试过了storing data in TagHelperContext to communicate with other tag helpers,但这也行不通,因为我必须在Parent的Invoke方法中调用output.GetChildContentAsync()
,这会破坏缓存的整个目的。
答案 0 :(得分:1)
@ Encrypt0r你可以拥有TagHelpers context.Items和你的本地化密钥的内存中静态缓存关系。这将涉及使用您的context.Items执行GetChildContentAsync
一次。然后通过查找基于context.Items的键值(假设键值不是动态的)来缓存所有后续时间。
这样想:
// Inside your TagHelper
if (_cache.TryGetValue(context.UniqueId, out var localizationKeys))
{
... You already have the keys, do whatever
}
else
{
var myStatefulObject = new SomeStatefulObject();
context.Items[typeof(SomeStatefulObject)] = myStatefulObject;
await output.GetChildContentAsync();
_cache[context.UniqueId] = new LocalizationKeyStuff(myStatefulObject);
}