Asp.net mvc 向视图公开缓存对象的最佳方法
我使用Translator对象(自定义类)公开网站文本(该对象存储数据库中的文本)。转换器对象存储在缓存中的Application_Start()函数中 我当前使用的Translator对象是:Asp.net mvc 向视图公开缓存对象的最佳方法,asp.net-mvc,caching,razor,views,Asp.net Mvc,Caching,Razor,Views,我使用Translator对象(自定义类)公开网站文本(该对象存储数据库中的文本)。转换器对象存储在缓存中的Application_Start()函数中 我当前使用的Translator对象是: 我有一个MasterViewModel public class MasterViewModel { public Translator Translator = HttpContext.Current.Cache.Get("Translator") as Translator; }
- 我有一个MasterViewModel
public class MasterViewModel { public Translator Translator = HttpContext.Current.Cache.Get("Translator") as Translator; }
- 每个视图都有一个viewmodel,它继承了MasterViewModel
public class RandomViewModel : MasterViewModel { }
- 在我看来,我可以使用我的Translator对象
@model ViewModels.RandomViewModel @Model.Translator.GetText(label)
@Translate.GetText("RANDOM_TEXT")
这将是帮助函数(在Translate.cshtml中)
所以我的问题是,向所有视图公开缓存对象的最佳方式是什么。
上述方法之一好吗?或者我应该采用另一种解决方案
(我希望我的英语没问题,我是荷兰人)有不同的方法可以实现这一点,但我将通过从
WebViewPage
派生来创建一个基类,并强制所有razor视图继承自该类
public abstract class MyWebViewPageBase<T>: WebViewPage<T>
{
private Translator _translator;
protected override void InitializePage()
{
_translator = Context.Cache.Get("Translator") as Translator;
}
public string Translate(string label)
{
if(_translator != null)
return _translator.GetText(label);
return "";
}
}
另一种方法是全局设置所有视图的基本页面,为此,您必须修改视图
文件夹中的web.config
您必须如下设置pages
元素的pageBaseType
<pages pageBaseType="MyWebViewPageBase">
@Translate("RANDOM_TEXT")
希望这有帮助
<pages pageBaseType="MyWebViewPageBase">
@Translate("RANDOM_TEXT")