Skip to main content

Services

services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly())

是针对 FluentValidation 库的一种配置方法,它用于自动发现和注册验证器。以下是它是如何工作的:

  1. Assembly.GetExecutingAssembly(): Assembly.GetExecutingAssembly() 返回当前执行代码的程序集,也就是包含当前应用程序的代码的程序集。在 ASP.NET Core 项目中,这通常是包含您的控制器、服务和请求/响应模型的程序集。

  2. services.AddValidatorsFromAssembly(): AddValidatorsFromAssembly() 是 FluentValidation 库的一个扩展方法,它用于将验证器注册到 ASP.NET Core 依赖注入容器中,以便它们可以在需要时自动解析和使用。

  3. 自动扫描和注册验证器: 当您调用 services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly()) 时,FluentValidation 库会自动扫描当前执行的程序集中的所有类型,查找实现了 AbstractValidator<T> 抽象类的类型,其中 T 是您要验证的模型的类型。它会创建这些验证器的实例并将它们注册到依赖注入容器中。

  4. 使用依赖注入容器中的验证器: 一旦验证器被注册到依赖注入容器中,您可以在应用程序的任何部分通过构造函数注入它们,然后使用它们来验证请求数据。例如,在控制器中:

    using FluentValidation;

    public class MyController : ControllerBase
    {
    private readonly IValidator<MyModel> _validator;

    public MyController(IValidator<MyModel> validator)
    {
    _validator = validator;
    }

    [HttpPost]
    public IActionResult Create(MyModel model)
    {
    var validationResult = _validator.Validate(model);

    if (!validationResult.IsValid)
    {
    // 处理验证失败
    return BadRequest(validationResult.Errors);
    }

    // 处理验证通过的情况
    return Ok("Validation passed");
    }
    }

    在上述示例中,我们通过构造函数注入了 IValidator<MyModel>,并在 Create 操作方法中使用它来验证 MyModel 模型的数据。

这种自动扫描和注册验证器的机制使得在 ASP.NET Core 中使用 FluentValidation 变得非常方便,您无需手动注册每个验证器,而是让库自动处理。这有助于提高代码的可维护性和可读性,特别是在处理大量验证逻辑时。