Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Począwszy od .NET 11 RC 1, generator źródeł weryfikacji opcji rozpoznaje jawną implementację IValidateOptions<TOptions>.Validate jako implementację odręczną. Zgłasza diagnostykę błędu SYSLIB1205 zamiast generować oddzielną publiczną metodę synchroniczną Validate.
Wersja wprowadzona
.NET 11 RC 1
Poprzednie zachowanie
Wcześniej generator źródła nie rozpoznał jawnej implementacji Validate(String, TOptions) jako istniejącej implementacji. Może wygenerować dodatkową metodę publiczną Validate, więc wywołania interfejsu używały ręcznie napisanej implementacji, podczas gdy wywołania bezpośrednie konkretnego walidatora używały wygenerowanej metody. Dwie ścieżki wywołań mogą generować różne wyniki walidacji.
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
ValidateOptionsResult IValidateOptions<MyOptions>.Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Nowe zachowanie
Począwszy od .NET 11, generator źródła rozpoznaje jawną implementację, raportuje SYSLIB1205 i pomija synchroniczne Validate generowanie dla tego modelu opcji.
Jeśli moduł sprawdzania poprawności implementuje IAsyncValidateOptions<TOptions>również , synchroniczne i asynchroniczne generowanie pozostanie niezależne. Implementacja synchroniczna odręczna generuje SYSLIB1205 i pomija wygenerowane elementy Validate, ale generator nadal może emitować ValidateAsync.
Typ zmiany przełamującej
Ta zmiana może mieć wpływ na zgodność źródła.
Przyczyna zmiany
Poprzednie zachowanie zezwalało wywołaniom interfejsu na korzystanie z ręcznej walidacji, podczas gdy wywołania bezpośrednie używały oddzielnie wygenerowanej walidacji. Rozpoznawanie jawnych implementacji uniemożliwia niezauważalne obchodzenie wygenerowanej weryfikacji i usuwa te rozbieżne ścieżki weryfikacji. Aby uzyskać więcej informacji, zobacz dotnet/runtime#130263.
Zalecana akcja
Wybierz jednego właściciela dla implementacji synchronicznej Validate .
Aby użyć weryfikacji wygenerowanej przez źródło, zachowaj [OptionsValidator] i usuń implementację jawną odręczną:
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
}
Aby samodzielnie obsłużyć walidację, usuń [OptionsValidator] i samodzielnie zaimplementuj kompletny walidator:
public sealed class MyValidator : IValidateOptions<MyOptions>
{
public ValidateOptionsResult Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Brak przełącznika zgodności. Wyłączenie SYSLIB1205 nie rozwiązuje konfliktu własności metody.