题
在以下问题采取一看,现实世界中使用自定义.NET的属性你将如何落实@Esteban提出的解决方案?
我何时何代码将得到执行我觉得有点困惑。能否请您提供的代码,一个很好的样本。
我以前问过这个问题,但没有正确句话吧我想是这样...
解决方案
使用对于问题/答案您引用,我认为会有运行或者在数据层或者在确实验证类本身一些代码。该代码将使用在物体上反射而验证,以找到具有不同属性的属性和运行与该属性该属性相关联的特定的验证逻辑。
它看起来像下面这样:
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表单(赢表格)您找回改变Customer类的提交(保存)。对于每个属性,你检查它是否具有自定义属性(从ValidationAttribute继承或实现IValiador接口或类似这样的东西)与它相关联。对于调用属性的验证方法每个这样的属性(创建适当的验证类并调用validate方法)上的属性值。
您会使用反射:
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
的成员几乎是相同的。
不隶属于 StackOverflow