这是一个EntLib验证器,问题再次被忽略。我正在玩C#中的EntLib 5.0和XP pro上的.Net 4.0。属性由EntLib验证
我有T4模板生成一些业务对象(局部类)。所以我决定使用MetadataTypeAttribute
作为entLib 5.0文档(msdn)的绝对建议,将它们的验证属性放在好友类中。 但我从ValidatorFactory获得的对象Validator
不知道在元数据类中定义的验证属性。
业务对象的定义如下:
[MetadataType(typeof(PatientMetadata))]
public partial class Patient
{
private string _Name;
private int _DiagnosisCount;
public int DiagnosisCount
{
get
{
return _DiagnosisCount;
}
set
{
if (value != _DiagnosisCount)
{
_DiagnosisCount = value;
}
}
}
public string Name
{
get
{
return _Name;
}
set
{
if (value != _Name)
{
_Name = value;
}
}
}
}
和元数据类这样的,根据文档:
public class PatientMetadata
{
[RangeValidator(4)]
public int DiagnosisCount { get; set; }
[StringLengthValidator(64, ErrorMessage = "Name must not exceed 64 chars.")]
public string Name { get; set; }
}
如果我知道试着做验证这种方式:
var factory = ValidationFactory.DefaultCompositeValidatorFactory;
var validator = factory.CreateValidator<Patient>();
...然后看着成validator
(在调试过程中)已经说,我t只是一个AndCompositeValidator
没有任何儿童验证器。 同样,如果我将验证属性放在Patient
类中,它就可以很好地工作。
到现在为止,我没有真正的想法,我很想念这里,因为我觉得根据文档所做的一切。
在此先感谢你们!
你是对的,但命名问题就在我的例子中,而不是在我的应用程序本身。但是我同时想到,如果我在原始类中有属性,那么在元数据类中使用**属性**是非常重要的。正如你所说,他们使用文档中的字段,我认为是什么样的误导。数据类型是不相关的,他们建议使用对象,但只要你愿意,你仍然可以使用相应的类型。 –