Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用fluentvalidation检查另一个规则_C#_.net_Validation_Fluentvalidation - Fatal编程技术网

C# 使用fluentvalidation检查另一个规则

C# 使用fluentvalidation检查另一个规则,c#,.net,validation,fluentvalidation,C#,.net,Validation,Fluentvalidation,我有以下代码来验证实体: public class AffiliateValidator : AbstractValidator<Affiliate> { public AffiliateValidator () { RuleFor(x => x.IBAN).SetValidator(new ValidIBAN()).Unless( x => String.IsNullOrWhiteSpace(x.IBAN)); }

我有以下代码来验证实体:

   public class AffiliateValidator : AbstractValidator<Affiliate>
   {
    public AffiliateValidator ()
    {
        RuleFor(x => x.IBAN).SetValidator(new ValidIBAN()).Unless( x => String.IsNullOrWhiteSpace(x.IBAN));
     }
    }
}

因此,IBAN类的CheckIBAN方法完成了肮脏的工作

现在,我需要对另一个属性应用以下规则: 如果DirectDebit(bool)为true,则IBAN不能为空,并且必须有效

我可以这样做:

RuleFor(x => x.DirectDebit).Equal(false).When(a => string.IsNullOrEmpty(a.IBAN)).WithMessage("TheMessage.");

但是我如何调用另一个规则,在本例中是IBAN的规则,以检查是否有效?

通常问题比看起来更简单。这是我用来应用DirectDebit字段规则的解决方案

    RuleFor(x => x.DirectDebit).Must(HaveValidAccounts).When(x => x.DirectDebit)
            .WithMessage("TheMessage");
并更改IBAN的规则:

 RuleFor(x => x.IBAN).Must(IsValidIBAN)
                            .Unless(x => String.IsNullOrWhiteSpace(x.IBAN))
                            .WithMessage("The IBAN \"{PropertyValue}\" is not valid.");
…然后:

   private bool HaveValidAccounts(ViewModel instance,   bool DirectDebit)
    {
        if (!DirectDebit)
        { return true; }

        bool CCCResult = IsValidCCC(instance.CCC);
        bool IBANResult = IsValidIBAN(instance.IBAN);

        return CCCResult || IBANResult;
    }

     private bool IsValidIBAN(string iban)
    {
        return CommonInfrastructure.Finantial.IBAN.CheckIban(iban, false).Validation == IBAN.ValidationResult.IsValid;
    }

诀窍是使用Must()的实例参数做任何我想做的事情

我已经编辑了你的标题。请看,“,其中的共识是“不,他们不应该”。@JohnSaunders:对不起。我不确定是什么贴在了标题上。但下次会记住“C#fluentvalidation检查另一条规则”
   private bool HaveValidAccounts(ViewModel instance,   bool DirectDebit)
    {
        if (!DirectDebit)
        { return true; }

        bool CCCResult = IsValidCCC(instance.CCC);
        bool IBANResult = IsValidIBAN(instance.IBAN);

        return CCCResult || IBANResult;
    }

     private bool IsValidIBAN(string iban)
    {
        return CommonInfrastructure.Finantial.IBAN.CheckIban(iban, false).Validation == IBAN.ValidationResult.IsValid;
    }