這是一個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
類中,它就可以很好地工作。
到現在爲止,我沒有真正的想法,我很想念這裏,因爲我覺得根據文檔所做的一切。
在此先感謝你們!
你是對的,但命名問題就在我的例子中,而不是在我的應用程序本身。但是我同時想到,如果我在原始類中有屬性,那麼在元數據類中使用**屬性**是非常重要的。正如你所說,他們使用文檔中的字段,我認爲是什麼樣的誤導。數據類型是不相關的,他們建議使用對象,但只要你願意,你仍然可以使用相應的類型。 –