Nancyfx,Ninject和Fluent验证

时间:2014-11-22 16:19:47

标签: ninject nancy fluentvalidation

我正在使用Nancyfx,Ninject和FluentValidation为angularjs驱动的网站提供服务。一切正常,直到我添加了流畅的验证。

这是(在我看来)重要的代码:

public class WebServerModule : NinjectModule {
    public override void Load() {
        Bind<IModelValidatorFactory>().To<FluentValidationValidatorFactory>().InSingletonScope();
    }
}

public class PersonValidator : AbstractValidator<Person> {
    public PersonValidator() {
        RuleFor(p => p.UserNumber).NotEmpty();
    }
}

protected virtual dynamic HandlePost(dynamic parameters) {
    try {
        TEntity e = this.BindAndValidate<TEntity>();
        var table = TableForType<TEntity>();
        table.Insert(e);

        return HttpStatusCode.Accepted;
    } catch (Exception ex) {
        return HttpStatusCode.BadRequest;
    }
}

每当我在我的角度边调用post时,就会抛出一个System.ArgumentException: &#34; TEntity e = this.BindAndValidate();&#34; 消息文本为:&#34;已添加具有相同密钥的项目。&#34;

你能帮我解决一下这个问题吗?

祝你好运

迈克尔

1 个答案:

答案 0 :(得分:0)

Nancy从v0.12自动连接IModelValidatorFactory(请参阅此处Configure NancyFx with Fluent Validation) - 您只需连接验证器。

这适用于Nancy 0.23

using FluentValidation;

using Ninject.Extensions.Conventions;
using Ninject.Modules;

public class ValidatorModule : NinjectModule
{
    public override void Load()
    {
        this.Kernel.Bind(
            x =>
            x.FromAssembliesMatching("YourNameSpace.*")
             .SelectAllClasses()
             .InheritedFrom<IValidator>()
             .BindAllInterfaces());
    }
}