Types d’intergiciels avec plusieurs constructeurs
Auparavant, lorsqu’un type d’intergiciel avec plusieurs constructeurs satisfiables a été instancié à partir du conteneur d’injection de dépendances, celui avec le plus de paramètres a été utilisé. Maintenant que cela se produit uniquement si le conteneur d’injection de dépendances IServiceProviderIsServiceimplémente . Si ce n’est pas le cas, une exception est levée au moment de l’exécution.
Version introduite
.NET 9 RC 1
Comportement précédent
Auparavant, le premier des deux constructeurs suivants était préféré (lorsque les deux étaient satisfaits), car il possède plus de paramètres.
public class CookiePolicyMiddleware
{
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options, ILoggerFactory factory)
{
// ...
}
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options)
{
// ...
}
}
Nouveau comportement
À compter de .NET 9, aucun constructeur n’est préféré et la construction échoue avec une erreur comme :
System.InvalidOperationException : « Plusieurs constructeurs acceptant tous les types d’arguments donnés ont été trouvés dans le type « Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware ». Il ne doit y avoir qu’un seul constructeur applicable.
Type de changement cassant
Ce changement est un changement de comportement.
Raison du changement
Le mécanisme d’activation a été modifié pour aider à prendre en charge l’injection de dépendances à clé.
Action recommandée
Si cela se produit et que vous ne pouvez pas effectuer de mise à niveau vers un conteneur d’injection de dépendances IServiceProviderIsServicequi implémente, vous pouvez ajouter le ActivatorUtilitiesConstructorAttribute constructeur préféré du type d’intergiciel affecté.
API affectées
Cette modification est connue pour provoquer des erreurs lors de l’instanciation Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware avec Autofac.Extensions.DependencyInjection 7.x.