【问题标题】:C# .net Core Fluentvalidation manual validation get validator class instanceC# .net Core Fluentvalidation 手动验证获取验证器类实例
【发布时间】:2018-01-08 21:22:42
【问题描述】:

我正在尝试获取验证器类实例,而不是在我的方法中手动启动。

我正在使用 Asp .net core webapi 2,在此我使用

在启动类中注册我的验证器
services.AddMvc().AddFluentValidation().

在我的一种操作方法中,我必须验证规则集。所以我在本地创建我的验证器类,比如

var validator = new MyClassValidator()
var result = validator.Validate(obj,ruleSet: "RulesetName");

我试图避免这种说法var validator = new MyClassValidator()。 我想使用 IOC 并获得一个实例。有什么帮助吗?

【问题讨论】:

  • 您是否尝试简单地将相应的IValidator<MyClass> 添加到控制器构造函数中?

标签: c# validation asp.net-web-api asp.net-core fluentvalidation


【解决方案1】:

需要在IoC容器中手动注册MyClassValidator

services.AddTransient<IValidator<T>, MyClassValidator>();

As documentation states,你不需要手动使用这个类的实例,FluentValidation会自动验证它。

FluentValidation 可以与 Asp.NET Core 集成。启用后, MVC 将使用 FluentValidation 来验证传入的对象 通过模型绑定基础设施来控制器操作。

无论如何,如果你需要手动使用这个类,你可以简单地在你想要的构造函数中添加一个IValidator&lt;T&gt;类型的参数。

【讨论】:

  • 目前我正在注册 services.AddMvc().AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining());是否可以添加 services.AddTransient, MyClassValidator>();再次?我觉得我们正在注册验证器类两次..
  • fv.RegisterValidatorsFromAssemblyContaining&lt;startup&gt;() 如果你调用这个,你的验证器已经在 IoC 中注册了,所以你可以进入你的构造函数参数。
  • 是的,在构造函数中使用 IValidator 有效。我在创建这个问题之前尝试了同样的事情,但那个时候没有用。不知道我错过了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多