1

もっと具体的に言ってみましょう。ASP .Net MVCアプリケーションでいくつかのビュー モデルを作成し、リソースを使用していくつかのフィールドの属性を定義Displayし、リソース フィールド名を間違って入力すると、以下のスクリーン ショットのように赤色で強調表示されます。

ここに画像の説明を入力

Description以下のように表示する現在の Model プロパティに関するより詳細な情報を提供するカスタム属性を作成しました。

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 属性の場合のように赤色で強調表示されないことです。

ここに画像の説明を入力

Google で検索しようとしましたが、Google が私を正しく理解しているかどうか、または Google に自分自身を正しく表現しているかどうかわかりません。テキスト エディタでそのようなタイプのエラーを強調表示するにはどうすればよいですか? Resharper で Visual Studio 2012 を使用しています。

PS「なぜ使わないのです[Display(... Name = "Name", Description = "Description")]か?」のような質問を避けるために。この属性に関連付けられているカスタムHtml.DescriptionFor()ヘルパー メソッドがあり、元の MVC のものをオーバーライドまたは変更するHtml.DisplayDescription()ことは、内部チームの慣行では推奨されていません。

4

1 に答える 1

1

残念ながら、このハイライトはカスタム コードによるものです。NameReSharper には、プロパティの文字列リテラルから、 で指定された型の抽象構文ツリー内のノードへの参照を作成する「参照プロバイダー」がありますResourceType。文字列リテラルのプロパティが存在しない場合、参照は無効であり、エラーとして赤色で表示されます。プロパティが存在する場合、参照が作成され、文字列リテラルが使用箇所の検索に表示され、 の基になるプロパティの名前が変更されるResourceTypeと名前が変更されます。

参照プロバイダーを実装できる独自のプラグインを作成し、ReSharper が使用するコードに基づいて作成できます。dotPeekを起動して、呼び出された型を見つけます(でマークされDisplayNameAttributePropertyNameReferenceFactoryた内部クラスに注意してください。これは、参照プロバイダーについて ReSharper に伝える方法です)。FactoryReferenceProviderFactoryAttribute

于 2013-10-21T09:27:05.417 に答える