पर एक ऑब्जेक्ट पास करें, मैं ऑब्जेक्ट के अंदर संग्रह को सत्यापित करने के लिए FluentValidation का उपयोग कर रहा हूं, संग्रह ऑब्जेक्ट्स के तत्व को मूल ऑब्जेक्ट के तत्व से तुलना कर रहा हूं।ऑब्जेक्ट का एक तत्व FluentValidation SetValidator के कन्स्ट्रक्टर
लक्ष्य आउटपुट संग्रह में विफल होने के लिए संग्रह में प्रत्येक विफल आइटम के लिए प्रमाणीकरण विफलताओं को प्राप्त करना है।
मेरे पास सॉफ़्टवेयर आइटम की एक सूची है जिसमें सॉफ़्टवेयर आइटम हैं। यदि आदेश विरासत प्रणाली के लिए है, तो चयनित सॉफ़्टवेयर केवल विरासत सॉफ़्टवेयर हो सकता है, और इसके विपरीत, गैर-विरासत प्रणाली में केवल गैर-विरासत सॉफ़्टवेयर हो सकता है।
मेरे मॉडल:
public class SoftwareOrder
{
public bool IsLegacySystem;
public List<SoftwareItem> Software;
(...other fields...)
}
public class SoftwareItem
{
public bool Selected;
public bool IsLegacySoftware;
public int SoftwareId;
}
प्रमाणकों:
public class SoftwareOrderValidator : AbstractValidator<SoftwareOrder>
{
public SoftwareOrderValidator()
{
(..other rules..)
When(order => order.IsLegacySystem == true,() =>
{
RuleForEach(order => order.SoftwareItem)
.SetValidator(new SoftwareItemValidator(true));
});
When(order => order.IsLegacySystem == false,() =>
{
RuleForEach(order => order.SoftwareItem)
.SetValidator(new SoftwareItemValidator(false));
});
}
}
public class SoftwareItemValidator : AbstractValidator<SoftwareItem>
{
public SoftwareItemValidator(bool IsLegacySystem)
{
When(item => item.Selected,() =>
{
RuleFor(item => item.IsLegacySoftware)
.Equal(IsLegacySystem).WithMessage("Software is incompatible with system");
});
}
}
आप देख सकते हैं, मैं जब प्रत्येक शर्त के लिए एक होने से इस को पूरा कर रहा हूँ। यह काम करता है, लेकिन यह DRY का उल्लंघन करता है और केवल दो स्थितियों से अधिक स्थिति में उपयोग करने के लिए व्यावहारिक नहीं है।
मैं आदर्श रूप में एक भी RuleForEach कि ऐसा कर सकता है करना चाहते हैं, कोई Whens, जरूरत कुछ की तरह:
RuleForEach(order => order.SoftwareItem)
.SetValidator(new SoftwareItemValidator(order => order.IsLegacySystem));
लेकिन मुझे लगता है कि निर्माता में IsLegacySystem पारित करने के लिए किसी भी तरह से नहीं देख सकता।
बहुत प्यारा मुश्किल – pirimoglu