我正在创建一个小型验证框架,我有一个自定义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);
}
}
提前致谢。