adr*_*anp 7 unity-container razor asp.net-mvc-3
我有一个自定义剃刀视图基类,它具有本地化相关服务的属性,通过属性注入与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);
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于Index.cshtml
@{
ViewBag.Title = Localize("Title");
Layout = "~/Views/Shared/_Layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
但不是在_Layout.cshtml中,因为没有为服务设置对象引用.
@{
ViewBag.Title = Localize("Title");
}
Run Code Online (Sandbox Code Playgroud)
根据设计,依赖注入在 asp.net mvc 3 布局页面中不起作用(这意味着母版页 DI 中的 BaseView 也不起作用)。因此,您可以为布局页面解决您的LocalizationService问题UnityContainer(因此您需要将容器存储在其中HttpApplication并访问容器以通过它解决依赖关系)。
顺便说一句,ActionFilters 依赖项中的 BTW 也不起作用。