MVC: ObjectModelValidator invoca uma nova sobrecarga no ValidationVisitor.Validate

No ASP.NET Core 5.0, foi adicionada uma sobrecarga do ValidationVisitor.Validate. A nova sobrecarga aceita a instância de modelo de nível superior que contém as 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 esta nova sobrecarga de ValidationVisitor para realizar validação. Esta nova sobrecarga é pertinente se a sua biblioteca de validação se integrar com o sistema de validação de modelos do ASP.NET Core MVC.

Para discussão, consulte o issue 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 mudança

Esta alteração foi introduzida para suportar validadores, como CompareAttribute, que dependem da inspeção de outras propriedades.

Frameworks de validação que dependem de ObjectModelValidator para invocar a sobrecarga existente de ValidationVisitor devem sobrepor o novo método ao ter como alvo no .NET 5 ou posterior.

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

APIs afetadas

ValidationVisitor.Validate