我正在尝试编写一个强类型的,可本地化的DisplayNameAttribute,但是我什至无法编译它。我想在viewmodel属性上做的是
[LocalizedDisplayName<HomeResources>(r => r.WelcomeMessage)]
基本上可以做与
[DisplayName("Welcome to my site!")]
消息已本地化。但是,我既无法使通用构造函数正常工作(如何向构造函数提供类型参数?)也无法选择要使用的字符串。当前的构造函数如下所示
public class LocalizedDisplayNameAttribute<TResource> : DisplayNameAttribute
{
public LocalizedDisplayName(Expression<Func<TResource, string>> resource)
{ // ...
但是编译器抱怨输入参数不是编译时间常数,因此显然,这种方式无效。
有什么方法可以获取显示名称的强类型化本地化属性?已经有一个了吗?
最佳答案
您不能通过属性来做到这一点。请记住,属性纯粹是嵌入在程序集中的元数据。当前尚无法嵌入诸如表达式之类的代码结构作为元数据。
如果您真的想提供一种以强类型方式指定此元数据的方法,则可以编写自己的ModelMetadataProvider。这是一项非常高级的任务,但是我目前正在写一篇博客文章,该文章展示了如何编写一个我希望不久后会发布的文章。