Типы ПО промежуточного слоя с несколькими конструкторами
Ранее, когда тип ПО промежуточного слоя с несколькими удостоверяемыми конструкторами был создан из контейнера внедрения зависимостей, используется один с наибольшим набором параметров. Теперь это происходит только в том случае, если контейнер внедрения зависимостей реализует IServiceProviderIsService. Если это не так, исключение создается во время выполнения.
Представленные версии
.NET 9 RC 1
Прежнее поведение
Ранее первый из следующих двух конструкторов предпочтительнее (если оба были удовлетворены), так как он имеет больше параметров.
public class CookiePolicyMiddleware
{
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options, ILoggerFactory factory)
{
// ...
}
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options)
{
// ...
}
}
Новое поведение
Начиная с .NET 9, ни предпочтительным конструктором не является, и построение завершается ошибкой, например:
System.InvalidOperationException: "Несколько конструкторов, принимающие все указанные типы аргументов, найдены в типе Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware". Должен быть только один применимый конструктор.
Тип критического изменения
Причина изменения
Механизм активации был изменен для поддержки внедрения ключевых зависимостей.
Рекомендуемое действие
Если это произойдет, и вы не можете обновить контейнер внедрения зависимостей, который реализует IServiceProviderIsService, можно добавить ActivatorUtilitiesConstructorAttribute в предпочтительный конструктор затронутого типа ПО промежуточного слоя.
Затронутые API
Это изменение, как известно, вызывает ошибки при создании экземпляра Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware с помощью Autofac.Extensions.DependencyInjection 7.x.