Açık Doğrulama uygulamaları için seçenek doğrulama oluşturucusu SYSLIB1205 bildirir

.NET 11 RC 1'den başlayarak, seçenek doğrulama kaynak oluşturucu, IValidateOptions<TOptions>.Validate öğesinin açık gerçekleştirimini elle yazılmış bir gerçekleştirim olarak tanır. Ayrı bir genel eşzamanlı SYSLIB1205 yöntem oluşturmak yerine hata tanılamasını Validate bildirir.

Sürüm kullanıma sunulmuştur

.NET 11 RC 1

Önceki davranış

Daha önce, kaynak oluşturucu, Validate(String, TOptions) öğesinin açık bir uygulamasını mevcut bir uygulama olarak tanımıyordu. Ek bir genel Validate yöntem oluşturabilir, bu nedenle arabirim çağrıları elle yazılmış uygulamayı kullanırken somut doğrulayıcıdaki doğrudan çağrılar oluşturulan yöntemi kullandı. İki çağrı yolu farklı doğrulama sonuçları üretebilir.

[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
    ValidateOptionsResult IValidateOptions<MyOptions>.Validate(string? name, MyOptions options)
        => ValidateOptionsResult.Success;
}

Yeni davranış

.NET 11'den başlayarak, kaynak oluşturucu açık uygulamayı tanır, SYSLIB1205 rapor eder ve bu seçenek modeli için eşzamanlı Validate oluşturmayı bastırır.

Doğrulayıcı IAsyncValidateOptions<TOptions> ögesini de uyguluyorsa, zaman uyumlu ve zaman uyumsuz oluşturma bağımsız kalır. Elle yazılmış zaman uyumlu uygulama Validate üretir ve oluşturulan SYSLIB1205 öğesini bastırır, ancak oluşturucu yine de ValidateAsync üretebilir.

Kesinti yaratan değişiklik türü

Bu değişiklik kaynak uyumluluğunuetkileyebilir.

Değişiklik nedeni

Önceki davranış, arabirim çağrılarının elle yazılmış doğrulamayı kullanmasına izin verirken, doğrudan çağrıların ayrı olarak oluşturulan doğrulamayı kullanmasına izin verdi. Açık gerçekleştirimlerin tanınması, oluşturulan doğrulamanın sessizce atlanmasını önler ve bu ayrık doğrulama yollarını kaldırır. Daha fazla bilgi için bkz. dotnet/runtime#130263.

Zaman uyumlu Validate uygulama için bir sorumlu seçin.

Kaynak tarafından oluşturulan doğrulamayı kullanmak için [OptionsValidator] öğesini koruyun ve el yazısıyla yazılmış açık uygulamayı kaldırın:

[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
}

Doğrulamayı manuel olarak kendiniz yönetmek için, [OptionsValidator] öğesini kaldırın ve tam doğrulayıcıyı kendiniz uygulayın:

public sealed class MyValidator : IValidateOptions<MyOptions>
{
    public ValidateOptionsResult Validate(string? name, MyOptions options)
        => ValidateOptionsResult.Success;
}

Uyumluluk anahtarı yoktur. SYSLIB1205 bastırma, yöntemin sahiplik çakışmasını çözmez.

Etkilenen API'ler