FluentValidation.AspNetCore не работает в библиотеке классов

Я использую в проекте библиотеку "FluentValidation.AspNetCore": "6.4.0-beta3" в .netcore WebApi. Вы можете увидеть структуру проекта ниже. Библиотека работает нормально, если я помещаю CurrencyDTO.cscode в раздел 2 (Project FH.WebAPI) и если тот же код помещен в раздел 1 (Библиотека классов DTO), он не работает. И требование состоит в том, что я должен разместить код в библиотеке классов FH.Common. Есть ли обходной путь? Я искал, но ничего не нашел

Структура проекта

«Структура

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..
        }

person Usman lqbal    schedule 03.02.2017    source источник


Ответы (1)


Проблема была в строке регистрации в startup.cs и спасибо @JeremySkinner, который подсказал мне правильный путь, и я цитирую его ответ здесь.

Моя ошибка

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

Заменить

RegisterValidatorsFromAssemblyContaining<Startup>() 

с участием

RegisterValidatorsFromAssemblyContaining<CurrencyDTOValidator>()

Фактическая ссылка на проблему

Описание ссылки

Выше ссылка - это ответы, опубликованные @JeremySkinner

person Usman lqbal    schedule 06.02.2017