asp.net-mvc - FluentValidation Autofac ValidatorFactory

标签 asp.net-mvc autofac fluentvalidation

我需要能够向我的 ValidatorFactory 提供 IComponentContext 来解析 FluentValidation 验证器。我有点卡住了。

验证器工厂

    public class ValidatorFactory : ValidatorFactoryBase
    {
        private readonly IComponentContext context;

        public ValidatorFactory(IComponentContext context)
        {
            this.context = context;
        }

        public override IValidator CreateInstance(Type validatorType)
        {
            return context.Resolve(validatorType) as IValidator;
        }
    }

如何提供上下文并注册 ValidatorFactory

FluentValidation.Mvc.FluentValidationModelValidatorProvider.Configure(x => x.ValidatorFactory = new ValidatorFactory());

最佳答案

您可以使其普遍适用于任何DependencyResolver,而不是将其与Autofac紧密耦合。直接使用它:

public class ModelValidatorFactory : IValidatorFactory
{
  public IValidator GetValidator(Type type)
  {
    if (type == null)
    {
      throw new ArgumentNullException("type");
    }
    return DependencyResolver.Current.GetService(typeof(IValidator<>).MakeGenericType(type)) as IValidator;
  }

  public IValidator<T> GetValidator<T>()
  {
    return DependencyResolver.Current.GetService<IValidator<T>>();
  }
}

然后您可以使用任何类型的 DependencyResolver 注册您的验证器作为强类型 IValidator<T>并且最终总会得到解决。

关于asp.net-mvc - FluentValidation Autofac ValidatorFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12225140/

相关文章:

c# - 在#MVC3 中有没有办法使用 DataAnnotations 属性添加 HTML5 占位符属性?

c# - 使用 Autofac 在两个 Controller 中获取不同的界面

c# - 如何在 Fluent 验证中根据字符串列表验证字符串?

c# - 添加类库程序集后出现 FileNotFoundException

asp.net-mvc - 将 Telerik Datepicker 添加到动态添加的表单字段

c# - Autofac 使用开放通用类解析开放通用接口(interface)

c# - 使用 Autofac 返回不同范围内的不同组件

c# - 不需要的文化特定 dll 复制到 bin 目录

FluentValidation是否允许为null或指定长度?

asp.net-mvc - 尝试读取 Web API 调用的响应