私は小さな検証フレームワークを作成しています。クラス内のメソッドとプロパティにValidation Attribute
割り当てることができるカスタムがあります。メソッド内で呼び出されると、呼び出し元のメソッドが見つかり、その属性がメソッドに割り当てられます。私のカスタム属性には、という名前のプロパティ名があります。したがって、検証属性を見つけると、そのタイプのクラススコープで任意のタイプを探します。今まで問題はありませんでしたが、問題は、検証する必要のあるプロパティの値を取得したいときに、そのプロパティ値を取得するためのそのクラスのインスタンスがないことです。この状況にどう対処できるかわかりません。助けてください。IsValid
ValidationCore
IsValid
ValidationCore
Validation
TypeToValidate
これは私のサンプルです:
public class TestClass
{
public static TestModel Model { get; set; }
public static ModelValidator ModelState
{
get { return new ModelValidator(); }
}
[Validate(typeof(TestModel))]
public static void DoSomething()
{
if (ModelState.IsValid)
{
// Do something else....
}
}
}
編集:これは私のIsValid
財産です
public virtual Boolean IsValid
{
get
{
// Get IsValid caller method
var method = GetCallerMethod();
// Get method attribute
var Attrib = GetMethodAttribute(typeof(ValidateAttribute), method);
// Get model to validate inside class scope
var modelProperty = GetModelToValidateInClassScope(Attrib, method);
if (modelProperty != null)
{
ValidateModel(modelProperty);
}
....
}
}
そしてここにValidateModel
方法があります:
protected virtual void ValidateModel(PropertyInfo modelProperty)
{
// Here I've model property
// But I can't get its value
var model = modelProperty.GetValue(null, null);
var properties = model.GetType().GetProperties(
BindingFlags.FlattenHierarchy |
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.DeclaredOnly);
foreach (var propertyInfo in properties)
{
// Add error to error list
GetPropertyErrors(model, propertyInfo);
}
}
前もって感謝します。