Como impedir que o Ninject substitua o DataAnnotationsModelValidatorProvider personalizado?
-
27-10-2019 - |
Pergunta
Eu tenho um DataAnnotationsModelValidatorProvider personalizado para fazer a validação do modelo de uma forma mais dinâmica do que apenas adicionar atributos.Tentei adicionar meu fornecer ao global.asax.cs assim:
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new AttributeValidatorProvider());
Mas assim que carrego meu formulário, recebo um erro dizendo "Nomes de tipo de validação em regras de validação de cliente discretas devem ser exclusivos. O seguinte tipo de validação foi visto mais de uma vez: obrigatório".
De acordo com um comentário neste blog , isso ocorre porque o Ninject está substituindo os provedores de validação personalizados.
Sou bastante novo em MVC e não consigo encontrar uma maneira de dizer ao Ninject para aceitar meus provedores personalizados também. Como eu faria para corrigir esse problema?
Para que conste: não desejo usar Fluentvalidation.net, quero ficar com as validações MVC padrão (na maior parte).
Solução
Altere o registro do provedor para
Rebind<ModelValidatorProvider>().To<AttributeValidatorProvider>();
Outras dicas
Existe outra maneira (funciona em MVC 4 com certeza):
Encontre sua classe que herda a interface IdependencyResolver
e adicione ao construtor _kernel.Unbind<ModelValidatorProvider>();
- você acabou de desassociar o validador ninject e não deve haver colisão com o validador padrão.
No meu caso, meu construtor se parece com isto:
public NinjectDependencyResolver()
{
_kernel = new StandardKernel();
_kernel.Unbind<ModelValidatorProvider>();
AddBindings();
}