通过castle windsor在webapi2中注册fluent验证的问题

本文关键字:fluent 验证 问题 注册 castle windsor webapi2 通过 | 更新日期: 2023-09-27 18:24:08

我有一个类:

WebApiInstaller : IWindsorInstaller

其中包含:

container.Register(
                Classes
                    .FromThisAssembly()
                    .BasedOn(typeof(AbstractValidator<>))
                    .WithService
                    .Base());
var container = new WindsorContainer();
container.Install(new WebApiInstaller());
GlobalConfiguration.Configuration.DependencyResolver = new WindsorHttpDependencyResolver(container); 

在我的global.cs文件中,我目前使用的是:

var container = new WindsorContainer();
container.Install(new WebApiInstaller());
GlobalConfiguration.Configuration.DependencyResolver = new WindsorHttpDependencyResolver(container);
FluentValidationModelValidatorProvider.Configure(GlobalConfiguration.Configuration, provider => provider.ValidatorFactory = new WindsorFluentValidatorFactory(container.Kernel));

WindsorFluentValidatorFactory如下所示:

public class WindsorFluentValidatorFactory : ValidatorFactoryBase
{
    private readonly IKernel _kernel;
    public WindsorFluentValidatorFactory(IKernel kernel)
    {
        _kernel = kernel;
    }
    public override IValidator CreateInstance(Type validatorType)
    {
        return _kernel.HasComponent(validatorType)
             ? _kernel.Resolve<IValidator>(validatorType)
             : null;
    }
}

我的端点如下:

public IHttpActionResult AddPointGivenGeoJsonPointDto([FromBody] Bla blaDto)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
}

Bla的装饰是这样的:

[Validator(typeof(BlaValidator))]
public class Bla

验证器看起来像这样:

public class BlaValidator : AbstractValidator<Bla>

不幸的是,尽管在集成测试中传递了无效对象,但ModelState从未无效。有人能看到我的windsor.castle注册有什么问题吗?我认为它不起作用。

通过castle windsor在webapi2中注册fluent验证的问题

如果不在调试模式下逐步执行代码,这真的很难诊断。

我已经有一段时间没有使用castle windsor了,但我建议在您的global.cs中放置一个断点,并在通过WindsorFluentValidatorFactory类配置容器对象后,在您的观察窗口中添加对容器对象的引用。

通过这样做,您可以检查容器及其所有注册的服务。我知道,在温莎城堡,它也有一份未注册服务的列表,以及失败的原因。

根据我的经验,通常情况下,链中缺少依赖项,如果一个依赖项没有正确注册,引用它的任何其他依赖项也会失败。

希望这能有所帮助。