私は再びあなたの助けが必要です。今回は、共分散、反分散、デリゲート、そして爆発する単純なアイデアに苦労しています...
リフレクションを操作し、属性を読み取り、プロパティ値の検証を実行できるように、デリゲートとそのパラメーターに必要なパラメーターを受け取る businessobject-properties の属性を実装したいと考えています。
この背後にある理由は、DataBinding で Windows.Forms を使用しており、DataBinding 更新メソッドを OnPropertyChanged に設定して、GUI で適切に機能する更新を取得する必要があるためです。ただし、ユーザーが実際にオブジェクトを保存できるかどうかを確認するために、コントロールの検証イベントに反応してプロパティを正しく検証する方法が必要です。ただし、コントロールの Validating-Event は、プロパティに値を書き込んだ後にのみ発生します。プロパティのセッターで検証を行うとクラッシュが発生し、検証をもう一度実装しない限り (またはセッターから呼び出されるメソッドに抽出しない限り)、ユーザーに正確な情報を提供できませんでした。
これを最もエレガントでクリーンに保つために、次のいずれかがあればいいと思いました。
[PropertyValidator(ValidationHelper.ValidateString, new StringValidatorArgs(true, 3, 15))]
そうすれば、すべてのプロパティに対してリフレクションを介して反復し、必要なすべての検証を実行し、正しいメソッドで PropertyValidator-Attribute を設定できます。しかし、私はアイデアを少し試してみましたが、とにかくこれを機能させることはできません。これが私が持っているものです。これを達成する方法についてのアイデアがあるかもしれません.
public delegate bool Validator(object validatee, ValidatorArgs v);
public class ValidatorArgs
{
}
public class StringValidatorArgs : ValidatorArgs
{
public StringValidatorArgs(bool nullCheck, int minLength, int maxLength)
{
this.NullCheck = nullCheck;
this.MinLength = minLength;
this.MaxLength = maxLength;
}
public bool NullCheck { get; set; }
public int MinLength { get; set; }
public int MaxLength { get; set; }
}
public class MyClass
{
[PropertyValidator(ValidationHelper.ValidateString, new StringValidatorArgs(true, 3, 15))]
public string MyString { get; set; }
}
public static class ValidationHelper
{
public static bool ValidateString(object validatee, StringValidatorArgs v)
{
return true;
}
}
[AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = true)]
public class PropertyValidatorAttribute
: Attribute
{
#region Constructor
private PropertyValidatorAttribute()
{
}
public PropertyValidatorAttribute(Validator validator, ValidatorArgs args)
{
this.Validator = validator;
this.Args = args;
}
#endregion
#region Properties
public Validator Validator
{
get;
private set;
}
public ValidatorArgs Args
{
get;
private set;
}
#endregion
}
どんなヒントでも歓迎...