简体   繁体   English

Blazor FluentValidation 如何将依赖项注入 AbstractValidator

[英]Blazor FluentValidation how to Inject dependency to AbstractValidator

I am using FluentValidator for a current Blazor-Server Project.我正在为当前的 Blazor-Server 项目使用 FluentValidator。

Now i need to inject my database service class for validate duplication and stuff like that.现在我需要注入我的数据库服务 class 来验证重复和类似的东西。

 public class StockValidator : AbstractValidator<LagertypModel>
{
    private StockOverviewService _stockservice;

    public StockValidator(StockOverviewService stockservice)
    {
        _stockservice = stockservice;
        RuleFor(LagertypModel => LagertypModel.Lagertyp).NotEmpty().MaximumLength(4).Must(Lagertyp => {
            return _stockservice.validateStockTypeCU(Lagertyp).Result;
        });


    }
}

But when i do that i get the error that StockValidator needs to have a parameterless contructor.但是当我这样做时,我得到 StockValidator 需要有一个无参数构造函数的错误。

How can i inject my dependency now?我现在如何注入我的依赖?

Where you instantiate your StockValidator class make sure you pass your service into it like so:在你实例化你的StockValidator class 的地方,确保你像这样将你的服务传递给它:

Program.cs程序.cs

builder.Services.AddSingleton<StockOverviewService>();

StockOverviewService.cs StockOverviewService.cs

private StockValidator_validator;
public StockOverviewService(LiveConnectionString connectionString)
        {
            _connectionString = connectionString;
            _validator = new StockValidator(this);
        }

StockValidator.cs StockValidator.cs

public class StockValidator : AbstractValidator<LagertypModel>
{
    private StockOverviewService _stockservice;

    public StockValidator(StockOverviewService stockservice)
    {
        _stockservice = stockservice;
        RuleFor(LagertypModel => LagertypModel.Lagertyp).NotEmpty().MaximumLength(4).Must(Lagertyp => {
            return _stockservice.validateStockTypeCU(Lagertyp).Result;
        });


    }
}

Assuming your StockOverviewService uses async methods for accessing a DB/Api, I don't recommend this approach because you're making the code run synchronously here:假设您的StockOverviewService使用异步方法访问 DB/Api,我不推荐这种方法,因为您要让代码在这里同步运行:

return _stockservice.validateStockTypeCU(Lagertyp).Result;

but it will work.但它会起作用。

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

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