質問
私は2.1.10リリース候補にAutofac 1.4からコードをアップグレードしています。
このような私のモジュール以前に行っ登録:
builder.RegisterCollection<IExceptionHandler>()
.As<IEnumerable<IExceptionHandler>>()
.FactoryScoped();
builder.Register<AspNetExceptionHandler>()
.As<IExceptionHandler>()
.MemberOf<IEnumerable<IExceptionHandler>>()
.FactoryScoped();
さて、RegisterCollection
にはパラメータなしのオーバーロードがありません。私はそれに名前を割り当てることを気にしないでください。このように私のコードのルックスは2.1で、ちょうどnull
に合格することのOKを想定します:
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、 文字列は、「)が必要です '3' 型の引数
私は念のために、代わりにヌルのコレクション名を入れてみました、それは効果がなかった。
2.1でコレクションを登録するための適切な方法は何でしょうか。
解決
私の理解では、あなただけのIExceptionHandler
タイプの束を登録し、あなたがIEnumerable<IExceptionHandler>
を要求するときにAutofac 2はあなたのためにすべての世話をします。
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());
所属していません StackOverflow