Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Počínaje verzí .NET 11 RC 1 rozpozná generátor zdrojového kódu pro ověřování možností explicitní implementaci IValidateOptions<TOptions>.Validate jako ručně psanou implementaci. Hlásí diagnostiku chyby SYSLIB1205 namísto vygenerování samostatné veřejné synchronizované Validate metody.
Verze byla představena
.NET 11 RC 1
Předchozí chování
Dříve generátor zdrojů nerozpoznával explicitní implementaci Validate(String, TOptions) jako existující implementaci. Může vygenerovat další veřejnou Validate metodu, takže volání rozhraní používala ručně psanou implementaci, zatímco přímá volání konkrétního validátoru používala vygenerovanou metodu. Dvě cesty volání můžou vést k různým výsledkům ověření.
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
ValidateOptionsResult IValidateOptions<MyOptions>.Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Nové chování
Počínaje .NET 11 rozpozná generátor zdrojů explicitní implementaci, nahlásí SYSLIB1205 a potlačí synchronní generování Validate pro daný model možností.
Pokud validátor také implementuje IAsyncValidateOptions<TOptions>, synchronní a asynchronní generování zůstává nezávislé. Ručně psaná synchronní implementace vytváří SYSLIB1205 a potlačuje generované Validate, ale generátor může stále generovat ValidateAsync.
Typ zásadní změny
Tato změna může mít vliv na kompatibilitu zdroje.
Důvod změny
Předchozí chování umožňovalo, aby volání rozhraní používala ručně psané ověřování, zatímco přímá volání používala samostatně generované ověřování. Rozpoznávání explicitních implementací zabraňuje tichému obejití vygenerovaného ověření a odstraňuje tyto odlišné cesty ověřování. Další informace najdete v tématu dotnet/runtime#130263.
Doporučená akce
Zvolte jednoho vlastníka pro implementaci Validate, která je synchronní.
Pokud chcete použít ověřování generované zdrojem, ponechte [OptionsValidator] a odeberte rukou psanou explicitní implementaci:
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
}
Chcete-li si validaci zajišťovat ručně, odeberte [OptionsValidator] a implementujte kompletní validátor sami:
public sealed class MyValidator : IValidateOptions<MyOptions>
{
public ValidateOptionsResult Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Neexistuje žádný přepínač kompatibility. Potlačení SYSLIB1205 nevyřeší konfliktní vlastnictví metody.