Tipos de middleware con varios constructores
Anteriormente, cuando se creaba una instancia de un tipo de middleware con varios constructores satisfiables desde el contenedor de inserción de dependencias, se usaba el que tenía la mayoría de los parámetros. Ahora que solo sucede si el contenedor de inserción de dependencias IServiceProviderIsServiceimplementa . Si no es así, se produce una excepción en tiempo de ejecución.
Versión introducida
.NET 9 RC 1
Comportamiento anterior
Anteriormente, se prefería el primero de los dos constructores siguientes (cuando ambos estaban satisfechos) porque tiene más parámetros.
public class CookiePolicyMiddleware
{
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options, ILoggerFactory factory)
{
// ...
}
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options)
{
// ...
}
}
Comportamiento nuevo
A partir de .NET 9, no se prefiere ningún constructor y se produce un error en la construcción como:
System.InvalidOperationException: "Se han encontrado varios constructores que aceptan todos los tipos de argumento especificados en el tipo "Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware". Solo debe haber un constructor aplicable".
Tipo de cambio importante
Este es un cambio de funcionamiento.
Motivo del cambio
Se cambió el mecanismo de activación para ayudar a admitir la inserción de dependencias con claves.
Acción recomendada
Si esto sucede y no se puede actualizar a un contenedor de inserción de dependencias IServiceProviderIsServiceque implementa , puede agregar al ActivatorUtilitiesConstructorAttribute constructor preferido del tipo de middleware afectado.
API afectadas
Este cambio se sabe que provoca errores al crear instancias Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware con Autofac.Extensions.DependencyInjection 7.x.