次の質問を見て、カスタム .NET 属性の実世界での使用@Esteban によって提案されたソリューションをどのように実装しますか?
コードがいつどこで実行されるかについて、私は少し混乱していると思います。コードの良いサンプルを提供してください。
この質問は以前にもしたことがありますが、適切に表現できていなかったと思います...
次の質問を見て、カスタム .NET 属性の実世界での使用@Esteban によって提案されたソリューションをどのように実装しますか?
コードがいつどこで実行されるかについて、私は少し混乱していると思います。コードの良いサンプルを提供してください。
この質問は以前にもしたことがありますが、適切に表現できていなかったと思います...
あなたが参照している質問/回答に関しては、データ層または検証を行うクラス自体で実行されるコードがあると思います。そのコードは、検証対象のオブジェクトで Reflection を使用して、さまざまな属性を持つプロパティを見つけ、そのプロパティのその属性に関連付けられた特定の検証ロジックを実行します。
次のようになります。
public void Validate( object obj )
{
foreach (var property in obj.GetType().GetProperties())
{
var attribute = property.GetCustomAttributes(typeof(ValidationAttribute), false);
var validator = ValidationFactory.GetValidator( attribute );
validator.Validate( property.GetValue( obj, null ) );
}
}
HTML フォーム (win フォーム) を送信 (保存) すると、変更された Customer クラスが返されます。プロパティごとに、関連付けられているカスタム属性 (ValidationAttribute から継承されるか、IValiador インターフェイスなどを実装する) があるかどうかを確認します。このようなプロパティごとに、プロパティ値に対して属性の検証メソッドを呼び出します (適切な検証クラスを作成し、検証メソッドを呼び出します)。
リフレクションを使用します。
public class MyClass
{
[Description("I'm an attribute!")]
public int MyField;
public Attribute GetAttribute(string fieldName)
{
FieldInfo field = typeof(MyClass).GetField("MyField");
Attribute[] attributes = (Attribute[])field.GetCustomAttributes(typeof(Attribute), false);
DescriptionAttribute desc = (DescriptionAttribute)attributes[0];
return desc;
}
}
属性付きメンバーがフィールドの場合はFieldInfo
、例で使用されているように を使用します。プロパティの場合は、 を使用し、とPropertyInfo
のメンバーはほとんど同じです。FieldInfo
PropertyInfo