Это снова проблема EntLib-Validator. Я играю с EntLib 5.0 на С# и .Net 4.0 на XP pro.
У меня есть некоторые бизнес-объекты (частичные классы), созданные шаблонами T4. Поэтому я решил поместить их атрибуты проверки в классы друзей, используя MetadataTypeAttribute
, как определенно рекомендуется в документации entLib 5.0 (msdn). Но объект Validator
, который я получаю от ValidatorFactory, не знает об атрибутах проверки, определенных в классе метаданных.
Бизнес-объект определяется следующим образом:
[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
(во время отладки) уже говорит, что это просто AndCompositeValidator
без каких-либо дочерних валидаторов. Опять же, если я помещу атрибуты проверки прямо в класс Patient
, все будет работать отлично.
На данный момент я понятия не имею, чего мне здесь не хватает, так как я думаю, что делаю все в соответствии с документами.
Заранее спасибо вам, ребята!