简体   繁体   English

FluentValidation DI将值传递给子验证器

[英]FluentValidation DI Passing Values to Child Validators

I recently discovered FluentValidator and started to play around with dependency injection. 我最近发现了FluentValidator并开始玩依赖注入。 I can't seem to figure out how to pass a value to a child validator using the current DI setup. 我似乎无法弄清楚如何使用当前的DI设置将值传递给子验证器。

I'd like to access Invoice.InvoiceNumber from the InvoiceDetailsValidator. 我想从InvoiceDetailsValidator访问Invoice.InvoiceNumber。

public class InvoiceValidator : AbstractValidator<Invoice>
{
    private readonly IDbContextFactory<DbContext> dbContextFactory;

    public InvoiceValidator(InvoiceDetailsValidator invoiceDetailsValidator, IDbContextFactory<DbContext> dbContextFactory)
    {
        ...

        RuleFor(x => x.InvoiceNumber)
            .Must(BeSomething)
            .WithMessage("Invoice number is required.");

        RuleForEach(x => x.InvoiceDetails)
            .SetValidator(invoiceDetailsValidator);
    }
}
public class InvoiceDetailsValidator : AbstractValidator<InvoiceDetails>
{
    public InvoiceDetailsValidator(IDbContextFactory<DbContext> dbContextFactory)
    {
        ...

        RuleFor(x => x.InvoiceSection)
            .NotEmpty()
            .When(X => !string.IsNullOrEmpty( /* InvoiceNumber? */ ))
            .WithMessage("Invoice section is required.");
    }
}

Any help would be greatly appreciated. 任何帮助将不胜感激。

Change Paarent validator constructor from 从中更改Paarent验证器构造函数

    public InvoiceValidator(InvoiceDetailsValidator invoiceDetailsValidator, 
                            IDbContextFactory<DbContext> dbContextFactory
                           )

to

    public InvoiceValidator(IValidator<InvoiceDetails> invoiceDetailsValidator, 
                            IDbContextFactory<DbContext> dbContextFactory
                           )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM