【问题标题】:How to stop Ninject from overriding custom DataAnnotationsModelValidatorProvider?如何阻止 Ninject 覆盖自定义 DataAnnotationsModelValidatorProvider?
【发布时间】:2011-12-02 13:11:40
【问题描述】:

我有一个自定义的 DataAnnotationsModelValidatorProvider 用于以更动态的方式进行模型验证,然后只添加属性。我尝试将我的提供添加到 global.asax.cs,如下所示:

ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new AttributeValidatorProvider());

但是,一旦我加载我的表单,我就会收到一条错误消息,提示“不显眼的客户端验证规则中的验证类型名称必须是唯一的。以下验证类型被多次看到:必需”。

根据a comment on this blog,这是因为 Ninject 正在覆盖自定义验证器提供程序。

我对 MVC 很陌生,我似乎无法找到一种方法来告诉 Ninject 也接受我的自定义提供程序,我将如何解决这个问题?

郑重声明:我不想使用 Fluentvalidation.net,我想坚持使用默认的 MVC 验证(大部分情况下)。

【问题讨论】:

    标签: asp.net-mvc-3 ninject customvalidator ninject.web.mvc


    【解决方案1】:

    将提供者的注册改为

    Rebind<ModelValidatorProvider>().To<AttributeValidatorProvider>();
    

    【讨论】:

    • 我似乎无法让 Ninject 使用内置的 DataAnnotationsModelValidatorProvider,即使像您提到的那样尝试重新绑定。 Ninject 似乎开箱即用,打破了验证。 Ninject 的默认设置是什么以及如何将内置的 DataAnnotations 与 Ninject 一起使用。我进行了很多搜索,但没有找到具有有效解决方案的文档、博客文章或文章。
    • 谢谢!我错过了执行程序集的负载;只加载了我的服务和模块。
    • 我也有这个问题,但情况略有不同,你能看看我下面的答案吗?
    【解决方案2】:

    还有另一种方式(肯定适用于 MVC 4):

    找到你的继承IdependencyResolver接口的类并添加到构造函数_kernel.Unbind&lt;ModelValidatorProvider&gt;(); - 你只需解开ninject验证器,默认验证器应该不会发生冲突。

    在我的例子中,我的构造函数如下所示:

    public NinjectDependencyResolver()
    {
           _kernel = new StandardKernel();
           _kernel.Unbind<ModelValidatorProvider>();
           AddBindings();
    }
    

    【讨论】:

    • 这解决了我的问题。但它会对 Ninject 做什么?
    • 我在使用 ASP.NET MVC 5.2.3.0Ninject.Web 3.3.0 时遇到了同样的问题,您的解决方案奏效了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2010-12-16
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多