Services
services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly())
是针对 FluentValidation 库的一种配置方法,它用于自动发现和注册验证器。以下是它是如何工作的:
-
Assembly.GetExecutingAssembly():
Assembly.GetExecutingAssembly()
返回当前执行代码的程序集,也就是包含当前应用程序的代码的程序集。在 ASP.NET Core 项目中,这通常是包含您的控制器、服务和请求/响应模型的程序集。 -
services.AddValidatorsFromAssembly():
AddValidatorsFromAssembly()
是 FluentValidation 库的一个扩展方法,它用于将验证器注册到 ASP.NET Core 依赖注入容器中,以便它们可以在需要时自动解析和使用。 -
自动扫描和注册验证器: 当您调用
services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly())
时,FluentValidation 库会自动扫描当前执行的程序集中的所有类型,查找实现了AbstractValidator<T>
抽象类的类型,其中T
是您要验证的模型的类型。它会创建这些验证器的实例并将它们注册到依赖注入容器中。 -
使用依赖注入容器中的验证器: 一旦验证器被注册到依赖注入容器中,您可以在应用程序的任何部分通过构造函数注入它们,然后使用它们来验证请求数据。例如,在控制器中:
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 变得非常方便,您无需手动注册每个验证器,而是让库自动处理。这有助于提高代码的可维护性和可读性,特别是在处理大量验证逻辑时。