Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A partir do .NET 11, o gerador de origem de validação de opções reconhece uma implementação explícita de IValidateOptions<TOptions>.Validate como uma implementação manuscrita. Ele relata o diagnóstico SYSLIB1205 de erro em vez de gerar um método síncrono Validate público separado.
Versão introduzida
.NET 11
Comportamento anterior
Anteriormente, o gerador de origem não reconheceu uma implementação explícita de Validate(String, TOptions) como uma implementação existente. Ele poderia gerar um método público Validate adicional, de modo que as chamadas de interface usariam a implementação manuscrita enquanto chamadas diretas no validador concreto usariam o método gerado. Os dois caminhos de chamada podem produzir resultados de validação diferentes.
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
ValidateOptionsResult IValidateOptions<MyOptions>.Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Novo comportamento
A partir do .NET 11, o gerador de origem reconhece a implementação explícita, relata SYSLIB1205e suprime a geração síncrona Validate para esse modelo de opções.
Se o validador também implementar IAsyncValidateOptions<TOptions>, a geração síncrona e assíncrona permanecerá independente. A implementação síncrona manuscrita produz SYSLIB1205 e suprime o Validate gerado, mas o gerador ainda pode emitir ValidateAsync.
Tipo de mudança disruptiva
Essa alteração pode afetar a compatibilidade do código-fonte.
Motivo da alteração
O comportamento anterior permitia que as chamadas de interface usssem validação manuscrita enquanto as chamadas diretas usavam a validação gerada separadamente. Reconhecer implementações explícitas impede que a validação gerada seja ignorada silenciosamente e remove esses caminhos de validação divergentes. Para obter mais informações, consulte dotnet/runtime#130263.
Ação recomendada
Escolha um proprietário para a implementação síncrona de Validate.
Para usar a validação gerada pelo código-fonte, mantenha [OptionsValidator] e remova a implementação explícita manuscrita:
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
}
Para controlar a validação manualmente, remova [OptionsValidator] e implemente o validador completo por conta própria:
public sealed class MyValidator : IValidateOptions<MyOptions>
{
public ValidateOptionsResult Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Não há nenhuma chave de compatibilidade. Suprimir SYSLIB1205 não resolve a propriedade conflitante do método.