【发布时间】:2011-06-15 06:02:44
【问题描述】:
我有一个自定义 razor 视图基类,它有一个依赖于本地化的服务的属性,该服务通过属性注入被 Unity 注入。
如果我在视图中使用该属性,则该属性已正确解析。但是,如果我尝试在布局(母版页)中使用相同的属性,则该属性尚未设置。
在 Unity 尝试解析视图并注入依赖项之前,谁能解释一下视图是如何渲染和编译的。
我正在尝试使用约定 [ViewName.Title] 设置每个视图的标题,并进行本地化服务查找,这在视图上效果很好,但我不想在每个视图中重复它。我有一种将逻辑移至 _ViewStart.cshtml 的感觉,但 ViewBag 或我的本地化服务在那里不可用。
基类:
public abstract class LocalizeBaseWebViewPage<TModel> : WebViewPage<TModel>
{
[Microsoft.Practices.Unity.Dependency]
public ILocalizationService LocalizationService { get; set; }
public virtual string Localize(string key)
{
return LocalizationService.GetResource(key);
}
}
这适用于 Index.cshtml
@{
ViewBag.Title = Localize("Title");
Layout = "~/Views/Shared/_Layout.cshtml";
}
但不在 _Layout.cshtml 中,因为没有为服务设置对象引用。
@{
ViewBag.Title = Localize("Title");
}
【问题讨论】:
-
向我们展示您的属性在 razor 基类中的外观以及母版页中的用途。
-
您能否在控制器中执行此操作,并让您发送到视图的视图模型 dto(或 ViewBag 属性)已经本地化?
-
@Charlino 我不确定我是否理解,但问题似乎是布局页面在从容器生成完整视图之前执行。
标签: asp.net-mvc-3 razor unity-container