2016-09-03 13 views
2

C#6では、nameof()キーワードを使用して、ローカライズを使用するタイプセーフなDisplay属性を作成できるようになりました。 (もDisplayName attribute from Resources?参照)ResourceTypeを推測するカスタムDisplayAttributeを作成する

結果はこのようなものになります。

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

しかし、プロパティの数十のためにこれを入力した後、私はもっと簡単な方法がなければならない感覚を得ます。毎回同じ情報を2回(ほとんど)入力しています。

質問: 名前情報からResourceTypeを推測するカスタムDisplayName属性を作成するにはどうすればよいですか?

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

これが可能であれば任意のアイデア:コードは次のようになります

?もしそうなら、どうですか?

+0

あなたはそれはあなたがそれを継承することができないことを意味' sealed'であることがわかります。 1つの方法は、リソースファイルから情報を読み取るカスタムの 'DisplayNameAttribute'を作成することです。 –

+0

はい、クラスは封印されています。それは残念ですが、おそらくそれは延長で達成されるかもしれませんか? – Frank

答えて

0

ちょうど定義する別の属性を定義することもできます。

この属性はクラス定義に配置します。 リソースの検索中にタイプのホストを調べ、リソースタイプを判別します。

例:あなたは `DisplayAttribute`クラスの定義を確認した場合

[DisplayResourceHost(typeof(Localization.Account))] 
public class ViewModel 
{ 
    [Display(NameResource = Localization.Account.MinPasswordLength)] 
    public int MinPasswordLength { get; set; } 
} 
関連する問題