FluentValidation.AspNetCore 在 Class 库中不起作用

FluentValidation.AspNetCore is not working in Class Library

我正在项目中的 .netcore WebApi 中使用库 "FluentValidation.AspNetCore": "6.4.0-beta3"。您可以在下面看到项目结构。如果我将 CurrencyDTO.cs 代码放在第 2 部分(项目 FH.WebAPI)中,并且如果将相同的代码放在第 1 部分(Class 库 DTO)中,则库工作正常,但它不起作用。要求是我必须将代码放在 Class 库 FH.Common 中。有没有什么作品around.I有搜索但没有找到任何东西

项目结构

CurrencyDTO.cs

[Validator(typeof(CurrencyDTOValidator))]
    public class CurrencyDTO
    {
        public int Id { get { return CurrencyId; } }
        public int CurrencyId { get; set; }
        public string Name { get; set; }
        public string Symbol { get; set; }

    }

    public class CurrencyDTOValidator : AbstractValidator<CurrencyDTO>
    {
        public CurrencyDTOValidator()
        {
            RuleFor(x => x.Name).NotEmpty().NotNull().WithMessage("The currency 'Name' is required.")
                                      .Length(0, 250).WithMessage("The currency 'Name' cannot be more than 250 characters.");

            RuleFor(x => x.Symbol).NotEmpty().WithMessage("The currency Symbol is required.");


        }
    }

库配置

步骤 1)。添加 project.json

{
  "dependencies": {
    "Autofac": "4.3.0",
    "Autofac.Extensions.DependencyInjection": "4.0.0",
    "AutoMapper": "5.2.0",
    "EntityFramework": "6.1.3",
    "FH.Business": "1.0.0-*",
    "FH.Common": "1.0.0-*",
    "JWT": "1.4.1-beta",
    "Microsoft.AspNet.Http.Extensions": "1.0.0-rc1-final",
    "Microsoft.AspNet.WebApi.Client": "5.2.3",
    "Microsoft.AspNet.WebApi.Core": "5.2.3",
    "Microsoft.AspNetCore.Authentication.JwtBearer": "1.1.0",
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.1",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    //other libraries..
    "FluentValidation.AspNetCore": "6.4.0-beta3" //<------Here 
  },

  "tools": {
    "BundlerMinifier.Core": "2.0.238",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "net461": {
      "frameworkAssemblies": {
        "System.Drawing": "4.0.0.0"
      }
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "Areas/**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "bower install", "dotnet bundle" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

步骤 2)。在 Startup.cs

   public void ConfigureServices(IServiceCollection services)
            {
                // Add framework services.
                services.AddMvc(options => {  }).AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>());
// Other code..
             }

控制器中使用

[HttpPost]
        [Route("CreateCurrency")]
        public IActionResult CreateCurrency([FromBody] CurrencyDTO model)
        {
            if (!ModelState.IsValid) //<----Validate here
            {
                return new BadRequestObjectResult(ModelState);
            }
        //Other Code..
        }

问题出在 startup.cs 的注册行中,感谢@JeremySkinner 向我提出了正确的建议,我在这里引用他的回答。

我的错误

services.AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>());

替换

RegisterValidatorsFromAssemblyContaining<Startup>() 

RegisterValidatorsFromAssemblyContaining<CurrencyDTOValidator>()

Actual link to the Issue

Link 说明

以上link是@JeremySkinner发表的答案