可以使用的規則條件的包裹,以驗證集合,其中包含的對象不同的派生類型。
假設你有下一個類層次結構:
public class BaseClass
{
public string Name { get; set; }
}
public class DerivedClassOne : BaseClass
{
public int Count { get; set; }
}
public class DerivedClassTwo : BaseClass
{
public double Price { get; set; }
}
,集裝箱類BaseClass
對象的集合:
public class ContainerClass
{
public List<BaseClass> Collection { get; set; }
}
主要想法是創建一個驗證器類,即負責所有的類層次結構驗證:
public class CommonBaseClassValidator : AbstractValidator<BaseClass>
{
public CommonBaseClassValidator()
{
//common rule for all BaseClass types
RuleFor(x => x.Name)
.NotEmpty();
// special rules for base type
When(model => model.GetType() == typeof (BaseClass),() =>
{
RuleFor(x => x.Name)
.Length(0, 10);
// add rules here
});
//special rules for derived types
When(model => model.GetType() == typeof(DerivedClassOne),() =>
{
RuleFor(model => ((DerivedClassOne) model).Count)
.ExclusiveBetween(1, 9);
// add rules here
});
When(model => model.GetType() == typeof(DerivedClassTwo),() =>
{
RuleFor(model => ((DerivedClassTwo) model).Price)
.GreaterThan(1000);
// add rules here
});
}
}
並註冊呃這個類作爲一個集合項目驗證:
public class ContainerValidator : AbstractValidator<ContainerClass>
{
public ContainerValidator()
{
RuleFor(model => model.Collection)
.SetCollectionValidator(new CommonBaseClassValidator());
}
}