1

让我更具体一点。当我在ASP .Net MVC应用程序中创建一些视图模型并使用资源为某些字段定义Display属性时,如果我错误地输入了资源字段名称,我会在下面的屏幕截图中将其突出显示为红色:

在此处输入图像描述

我创建了自定义Description属性以提供有关当前模型属性的更多详细信息,如下所示:

using System;
using System.Resources;
using System.Web.Mvc;

namespace ...
{
    public class DescriptionAttribute : Attribute, IMetadataAware
    {
        public string Description { get; private set; }
        public Type ResourceType { get; set; }
        public string Name { get; set; }

        public void OnMetadataCreated(ModelMetadata metadata)
        {
            if (ResourceType == null) return;
            var resourceManager = new ResourceManager(ResourceType);
            metadata.Description = resourceManager.GetString(Name);
        }
    }
}

但是,问题是,当我在定义此属性时使用不存在的资源字段名称时,我不会像使用 Display 属性那样将其突出显示为红色。

在此处输入图像描述

我试图用谷歌搜索,但我不确定谷歌是否正确理解了我,或者我是否正确地向谷歌表达了自己。我应该怎么做才能让文本编辑器为我突出显示此类错误?我将 Visual Studio 2012 与 Resharper 一起使用。

PS为了避免诸如“你为什么不使用[Display(... Name = "Name", Description = "Description")]?”之类的问题。我会说我有自定义的Html.DescriptionFor()辅助方法,它与这个属性相关联,并且Html.DisplayDescription()我们内部团队的做法不建议覆盖或更改原始 MVC 的方法。

4

1 回答 1

1

不幸的是,这个亮点是通过自定义代码实现的。ReSharper 有一个“引用提供程序”,它创建从Name属性的字符串文字到抽象语法树中指定类型的节点的引用ResourceType。如果字符串文字中的属性不存在,则引用无效,并以红色显示为错误。如果属性确实存在,则创建引用并且字符串文字显示在查找用法中,并在重命名基础属性时ResourceType重命名。

您可以编写自己的插件来实现引用提供程序,并将其基于 ReSharper 使用的代码。启动dotPeek并找到调用的类型(注意标有 aDisplayNameAttributePropertyNameReferenceFactory的内部类,这是您告诉 ReSharper 参考提供程序的方式)。FactoryReferenceProviderFactoryAttribute

于 2013-10-21T09:27:05.417 回答