Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Vanaf .NET 11 RC 1 herkent de validatiebrongenerator van opties een expliciete implementatie van IValidateOptions<TOptions>.Validate als een handgeschreven implementatie. Het rapporteert de foutdiagnose SYSLIB1205 in plaats van een afzonderlijke openbare synchrone Validate methode te genereren.
Geïntroduceerde versie
.NET 11 RC 1
Vorig gedrag
Voorheen herkende de brongenerator geen expliciete implementatie van Validate(String, TOptions) als een bestaande implementatie. Het kan een extra openbare Validate methode genereren, dus interfaceaanroepen zouden de handgeschreven implementatie gebruiken terwijl directe aanroepen van de concrete validator de gegenereerde methode zouden gebruiken. De twee oproeppaden kunnen verschillende validatieresultaten opleveren.
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
ValidateOptionsResult IValidateOptions<MyOptions>.Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Nieuw gedrag
Vanaf .NET 11 herkent de brongenerator de expliciete implementatie, rapporteert SYSLIB1205 en onderdrukt de synchrone Validate generatie voor dat optiesmodel.
Als de validator ook IAsyncValidateOptions<TOptions> implementeert, blijven synchrone en asynchrone generatie onafhankelijk. De handgeschreven synchrone implementatie produceert SYSLIB1205 en onderdrukt gegenereerd Validate, maar de generator kan nog steeds verzenden ValidateAsync.
Type van brekende verandering
Deze wijziging kan van invloed zijn op de broncompatibiliteit.
Reden voor wijziging
Het vorige gedrag stond interfaceaanroepen toe om handgeschreven validatie te gebruiken, terwijl directe aanroepen afzonderlijk gegenereerde validatie gebruikten. Als u expliciete implementaties herkent, voorkomt u dat gegenereerde validatie stilzwijgend wordt omzeild en worden deze afwijkende validatiepaden verwijderd. Zie dotnet/runtime#130263 voor meer informatie.
Aanbevolen actie
Kies één eigenaar voor de synchrone Validate implementatie.
Als u de door de bron gegenereerde validatie wilt gebruiken, moet u [OptionsValidator] behouden en de handgeschreven expliciete implementatie verwijderen:
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
}
Als u de validatie handmatig zelf wilt beheren, verwijdert u [OptionsValidator] en implementeert u de volledige validator zelf:
public sealed class MyValidator : IValidateOptions<MyOptions>
{
public ValidateOptionsResult Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Er is geen compatibiliteitsschakelaar. Het onderdrukken van SYSLIB1205 lost het conflicterende eigendom van de methode niet op.