asp.net-mvc-3 - 自定义 Razor View 基类和依赖项注入(inject)

标签 asp.net-mvc-3 razor unity-container

我有一个自定义的 razor View 基类,它具有本地化相关服务的属性,该服务通过属性注入(inject)使用 Unity 进行注入(inject)。

如果我在 View 中使用该属性,该属性就会得到正确解析。但是,如果我尝试在布局(母版页)中使用相同的属性,则该属性尚未设置。

有人可以解释一下在 Unity 尝试解析 View 并注入(inject)依赖项之前 View 是如何渲染和编译的吗?

我尝试使用约定 [ViewName.Title] 设置每个 View 的标题,并进行本地化服务查找,这在 View 上效果很好,但我不想在每个 View 中重复它。我感觉将逻辑移至 _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");
}

最佳答案

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

顺便说一句,ActionFilters 依赖项中的 BTW 也不起作用..

关于asp.net-mvc-3 - 自定义 Razor View 基类和依赖项注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6212658/

相关文章:

javascript - MVC razor 如何在客户端管理 TempData 值?

c# - 将 View 模型列表传递给 mvc Controller 操作

WCF,统一 : Teardown disposable instances

c# - 使用 EditorTemplate 时出现 id & name 错误

c# - 带有 UnityContainer 的 ASP MVC DependencyResolver 用于单元测试

asp.net-mvc-3 - 在asp.net MVC3.0中创建GridView

c# - Unity中有TryResolve吗?

javascript - 获取给定经纬度范围内的邮政编码

c# - 如何编写自定义@Html.Control For(o => o.Property)?

c# - Unity 可以一直不抛出 SynchronizationLockException 吗?