次の方法で共有


複数のコンストラクターを持つミドルウェア型

以前は、複数の満足できるコンストラクターを持つミドルウェア型が依存関係挿入コンテナーからインスタンス化された場合、パラメーターが最も多いものが使用されていました。 これは、依存関係挿入コンテナーが IServiceProviderIsServiceを実装している場合にのみ発生します。 そうでない場合は、実行時に例外がスローされます。

導入されたバージョン

.NET 9 RC 1

以前の動作

以前は、次の 2 つのコンストラクターのうち 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' 型で、指定されたすべての引数型を受け入れる複数のコンストラクターが見つかりました。 適用可能なコンストラクターは 1 つだけ必要です。'

破壊的変更の種類

この変更は、動作変更です。

変更理由

キー付き依存関係の挿入をサポートするために、アクティブ化メカニズムが変更されました。

これが発生し、 IServiceProviderIsServiceを実装する依存関係挿入コンテナーにアップグレードできない場合は、影響を受けるミドルウェア型の優先コンストラクターに ActivatorUtilitiesConstructorAttribute を追加できます。

影響を受ける API

この変更により、Autofac.Extensions.DependencyInjection 7.x でMicrosoft.AspNetCore.CookiePolicy.CookiePolicyMiddlewareをインスタンス化するときにエラーが発生することがわかされています。