【问题标题】:Create custom DisplayAttribute that infers ResourceType创建推断 ResourceType 的自定义 DisplayAttribute
【发布时间】:2017-01-11 09:08:42
【问题描述】:

使用 C#6,使用 nameof() 关键字,现在可以创建一个使用本地化的类型安全的 Display 属性。 (另见DisplayName attribute from Resources?

结果会是这样的:

    [Display(NameRes = Localization.Account.MinPasswordLength), ResourceType = typeof(Localization.Account))]
    public int MinPasswordLength { get; set; }

但是,在输入了几十个属性之后,我觉得必须有一个更简单的方法。每次我都输入相同的信息两次(几乎)。

我的问题是: 如何创建从名称信息推断 ResourceType 的自定义 DisplayName 属性?

然后代码将如下所示:

    [Display(NameResource = Localization.Account.MinPasswordLength)]
    public int MinPasswordLength { get; set; }

知道这是否可能吗?如果是这样:如何?

【问题讨论】:

  • 如果你检查DisplayAttribute类的定义,你会注意到它是sealed,这意味着你不能从它继承。一种方法是创建您的自定义DisplayNameAttribute,它将从资源文件中读取信息。
  • 是的,班级是密封的。这很不幸,但也许可以通过扩展来实现?

标签: c# asp.net-mvc-4 attributes c#-6.0


【解决方案1】:

一种方法是定义另一个属性,该属性只定义获取资源类型。

您将此属性放入类定义中。 在资源搜索过程中,您将检查类型主机以确定资源类型。

例子:

[DisplayResourceHost(typeof(Localization.Account))]
public class ViewModel
{
    [Display(NameResource = Localization.Account.MinPasswordLength)]
    public int MinPasswordLength { get; set; }
}

【讨论】:

    猜你喜欢
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    相关资源
    最近更新 更多