class Employee
{
[ValueNotEmpty("Empty strings not allowed"]
public string Name{get;set;}
}
"ValueNotEmpty"
是一个自定义属性。我尝试使用YABOV库但我必须显式调用基类的Validate方法来验证自定义属性并返回验证消息。
在实现类中,我使用反射来设置"Name"
字段的值。当我在"Name"
字段上设置值时,我希望try块抛出一个异常"Empty strings not allowed"
。有什么方法可以做到这一点,而不是在我为字段设置值时显式调用一个方法来验证类?。
答案 0 :(得分:0)
你可以尝试从IDataErrorInfo继承并实现如下,但我想这是你明确调用验证的意思。
public class Employee : IDataErrorInfo
{
public string Name{get;set;}
string IDataErrorInfo.Error {get {return null;}}
string IDataErrorInfo.this[string propertyName]
{
get { return this.GetValidationError(propertyName);}
}
string GetValidationError(string propertyName)
{
string error = null;
switch(propertyName)
{
case "Name":
error = ValidateName();
break;
default:
error = "Unknown proeprty";
break;
}
}
string ValidateName()
{
if(!string.IsNullOrEmpty(this.Name))
{
return null;
}
return "Empty Name";
}
}
答案 1 :(得分:0)
对这个问题的一些想法:
如果您的属性调用PropertyChanged事件,则可能有一种机制使用它来验证它。例如,与数据绑定相结合。如果您没有PropertyChanged,则需要显式调用Validate,除非您使用的是AOP。
设置值时执行代码需要AOP。在.Net标准库中,没有包含AOP技术,您必须集成一个(例如Spring)。 AOP需要代码生成或字节码增强。所以这不是一件小事。