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

结果将是这样的:

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


但是,在为数十个属性键入此属性之后,我感到必须有一种更简单的方法。每次我输入相同的信息两次(几乎)。

我的问题是这样的:
如何创建一个自定义DisplayName属性,该属性从Name信息中推断ResourceType?

然后,代码将如下所示:

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


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

最佳答案

一种方法可能是定义另一个仅定义采用资源类型的属性。

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

范例:

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

09-07 01:48