3

Autofac 2.1.12を使用して依存性注入を処理していますが、1つの特定の問題で問題が発生しています。NameValueCollectionの依存関係を解決できないようです。

次のコードスニペットについて考えてみます。

class Foo
{
    public Foo(NameValueCollection collection) { }
}

static class Run
{
    public static void Main()
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<NameValueCollection>();
        builder.RegisterType<Foo>();

        using (var scope = builder.Build())
            scope.Resolve<Foo>();
    }
}

未処理のDependencyResolutionExceptionでクラッシュします。

検出された循環コンポーネントの依存関係:Foo->System.Collections.Specialized.NameValueCollection->System.Collections.Specialized.NameValueCollection。

ただし、NameValueCollectionを他のタイプに置き換えると、コードは正常に機能します。

私は何か問題を抱えていますか、私が見逃しているNameValueCollectionタイプについて何か特別なことがありますか、それともこれはAutofac自体の問題ですか?

4

1 に答える 1

3

これは仕様によるものです。自動配線を参照してください

Autofacは、コンテナーから取得できるパラメーターが最も多いコンストラクターを自動的に選択します。

NameValueCollectionそのように登録してみてください(ただし、これが機能するかどうかはわかりません)。

builder.RegisterType<NameValueCollection>().UsingConstructor();

それでもうまくいかない場合は、試してみてください

builder.Register(c => new NameValueCollection());
于 2010-03-05T08:55:56.220 に答える