7

コードを Autofac 1.4 から 2.1.10 Release Candidate にアップグレードしています。

私のモジュールは以前に次のように登録を実行しました:

builder.RegisterCollection<IExceptionHandler>()
                .As<IEnumerable<IExceptionHandler>>()
                .FactoryScoped();
builder.Register<AspNetExceptionHandler>()
                .As<IExceptionHandler>()
                .MemberOf<IEnumerable<IExceptionHandler>>()
                .FactoryScoped();

現在、RegisterCollectionパラメーターなしのオーバーロードはありません。名前を付けるのは気にしません。を渡すだけで問題ないと仮定するとnull、私のコードは 2.1 で次のようになります。

builder.RegisterCollection<IExceptionHandler>(null)
                .As<IEnumerable<IExceptionHandler>>()
                .InstancePerDependency();
builder.RegisterType<AspNetExceptionHandler>()
                .As<IExceptionHandler>()
                .MemberOf<IEnumerable<IExceptionHandler>>(null)
                .InstancePerDependency();

ただし、コンパイルすると、次のエラーが発生します.MemberOf

ジェネリック メソッド 'Autofac.RegistrationExtensions.MemberOf(Autofac.Builder.RegistrationBuilder, string)' を使用するには、'3' 型引数が必要です

念のため、null の代わりにコレクション名を入れてみましたが、効果はありませんでした。

2.1 でコレクションを登録する適切な方法は何ですか?

4

1 に答える 1

6

私が理解しているように、あなたはたくさんのIExceptionHandlerタイプを登録するだけです、そしてあなたがリクエストするとき、IEnumerable<IExceptionHandler>Autofac2はあなたのためにすべての面倒を見るだけです。

NewInV2ページから:

builder.RegisterType<A1>().As<IA>();
builder.RegisterType<A2>().As<IA>();

var container = builder.Build();

// Contains an instance of both A1 and A2
Assert.AreEqual(2, container.Resolve<IEnumerable<IA>>().Count());
于 2010-02-24T22:19:04.567 に答える