c# - FluentValidation DI 将值传递给子验证器

标签 c# dependency-injection fluentvalidation

我最近发现了 FluentValidator 并开始研究依赖注入(inject)。我似乎无法弄清楚如何使用当前的 DI 设置将值传递给子验证器。

我想从 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.");
    }
}

如有任何帮助,我们将不胜感激。

最佳答案

更改 Paarent 验证器构造函数
    public InvoiceValidator(InvoiceDetailsValidator invoiceDetailsValidator, 
                            IDbContextFactory<DbContext> dbContextFactory
                           )

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

关于c# - FluentValidation DI 将值传递给子验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57916636/

相关文章:

c# - 使用 IOCTL_DVD_* 控制代码从 C# 调用 DeviceIoControl

c# - 检测文本框中的按键并接收过载 EventHandler 错误消息

c# - 希望 Autofac 不注册任何具有多个实现的接口(interface)

java - 向 Spring bean 注入(inject)依赖

asp.net-core - 如何访问 FluentValidation 构造函数内的模型属性?

c# - 如何多次写入一个文件

c# - 有什么想法可以缩短这段代码吗?

java - Spring Boot CommandLineRunner 和构造函数注入(inject)

c# - 来自 App 常量的流畅验证自定义检查

asp.net-mvc - 修改后如何在继承自 DefaultModelBinder 的自定义模型 Binder 中重新验证我的模型?