Asp.net mvc 3 自定义Razor视图基类和依赖项注入

Asp.net mvc 3 自定义Razor视图基类和依赖项注入,asp.net-mvc-3,razor,unity-container,Asp.net Mvc 3,Razor,Unity Container,我有一个定制的razor视图基类,它有一个本地化相关服务的属性,该服务通过属性注入注入Unity 如果我在视图中使用该属性,则该属性已正确解析。但是,如果我试图在布局(母版页)中使用相同的属性,则尚未设置该属性 在Unity尝试解析视图并注入依赖项之前,请有人解释一下视图是如何呈现和编译的 我试图使用约定[ViewName.title]设置每个视图的标题,并使用本地化服务查找,这在视图上非常有效,但我不想在每个视图中重复它。我觉得应该将逻辑移到_ViewStart.cshtml,但那里没有Vie

我有一个定制的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);
    }
}
但不在_Layout.cshtml中,因为没有为服务设置对象引用

@{
    ViewBag.Title = Localize("Title");
}

依赖项注入在asp.net mvc 3布局页面设计中不起作用(这意味着母版页中的BaseView DI也不起作用)。因此,对于布局页面,您可以通过
UnityContainer
解析您的
LocalizationService
(因此您需要将容器存储在
HttpApplication
中,并通过它访问容器以解析依赖关系)


顺便说一句,ActionFilters依赖项也不起作用。

向我们展示razor基类中的属性以及在母版页中的使用情况。您能在控制器中执行此操作,并将发送到视图的视图模型dto(或ViewBag属性)进行本地化吗?@Charlino我不确定是否理解,但问题似乎是在从容器生成完整视图之前就执行了布局页面。
@{
    ViewBag.Title = Localize("Title");
}