プログラムにカスタム属性をプロパティに適用する

私はコードにアクセスできないビジネスオブジェクトのAPIを消費しています。私はこれらのオブジェクトを私のかみそりビューで直接使用し、オブジェクトがインスタンス化された後に私のカスタムdisplayName属性を適用できるようにしたいと考えています。

だから、これの代わりに:

[DisplayName("First Name")]
public string GivenName;

私はしたい:

Profile.GivenName.DisplayName("FirstName");

私はどのようにカスタム属性を作成するのか理解していますが、それらをプログラム的にすることには問題があります。

私がこれを行うことができれば、私はDataAnnotationsの多くを適用することができます。

1

2 答え

代わりに、ビジネスオブジェクトからクラスを派生させ、 MetaDataType属性

[MetadataType(typeof(IMyAttributes))
public DerivedClass : BusinessClass
{
}

public interface IMyAttributes
{
  [Required]
  public string Name { get; set; }
}
2
追加された
はい、あなたはインターフェイスとインターフェイスのプロパティに属性を適用できます。
追加された 著者 Erik Philips,
タイプが封印されていない場合、これは間違いなく移動方法です。
追加された 著者 Paul Tyng,
これは良い考えです。私は余分なレイヤーを作るのを避けようとしていましたが、インターフェイスの考え方は良いです。私はインターフェイスにカスタム属性を適用できますか?
追加された 著者 Arnej65,

独自のModelMetadataProviderを作成し、他のソースからメタデータを検索させることができます。

See the abstract class here: http://msdn.microsoft.com/en-us/library/system.web.mvc.modelmetadataprovider.aspx

デフォルトのプロバイダではDataAnnotationsを使用していますが、SQLデータベースやXMLファイルなどに類似したものを簡単に作成することもできます。

0
追加された