다음을 통해 공유


여러 생성자가 있는 미들웨어 형식

이전에는 여러 개의 만족할 수 있는 생성자가 있는 미들웨어 형식이 종속성 주입 컨테이너에서 인스턴스화되었을 때 매개 변수가 가장 많은 미들웨어 형식이 사용되었습니다. 이제 종속성 주입 컨테이너가 구현하는 경우에만 발생합니다 IServiceProviderIsService. 그렇지 않으면 런타임에 예외가 throw됩니다.

도입된 버전

.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

이 변경 내용은 Autofac.Extensions.DependencyInjection 7.x를 사용하여 인스턴스화 Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware 할 때 오류를 발생시키는 것으로 알려져 있습니다.