MVC: ObjectModelValidator chama nova sobrecarga de ValidationVisitor.Validate

Em ASP.NET Core 5.0, uma sobrecarga de ValidationVisitor.Validate foi adicionada. A nova sobrecarga aceita a instância de modelo de nível superior que contém propriedades:

  bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel);
+ bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container);

ObjectModelValidator invoca essa nova sobrecarga de ValidationVisitor para executar a validação. Essa nova sobrecarga será pertinente se sua biblioteca de validação se integrar ao sistema de validação de modelo do MVC do ASP.NET Core.

Para discussão, confira o problema do GitHub dotnet/aspnetcore#26020.

Versão introduzida

5,0

Comportamento antigo

ObjectModelValidator invoca a seguinte sobrecarga durante a validação do modelo:

ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel)

Novo comportamento

ObjectModelValidator invoca a seguinte sobrecarga durante a validação do modelo:

ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)

Motivo da alteração

Essa alteração foi introduzida para dar suporte a validadores, como CompareAttribute, que dependem da inspeção de outras propriedades.

As estruturas de validação que dependem de ObjectModelValidator para invocar a sobrecarga existente de ValidationVisitor devem substituir o novo método ao ser direcionado ao .NET 5 ou versão posterior:

public class MyCustomValidationVisitor : ValidationVisitor
{
+  public override bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)
+  {
+    ...
}

APIs afetadas

ValidationVisitor.Validate