Не удается разрешить NameValueCollection с помощью Autofac

Я использую Autofac 2.1.12 для обработки внедрения зависимостей, и у меня возникли проблемы с одной конкретной проблемой. Кажется, я не могу разрешить зависимость 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?


person Matthew King    schedule 05.03.2010    source источник


Ответы (1)


Это по дизайну. См. раздел Автоматическое подключение:

Autofac автоматически выбирает конструктор с наибольшим количеством параметров, которые можно получить из контейнера.

Попробуйте зарегистрировать NameValueCollection вот так (хотя не уверен, что это сработает):

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

Если это не сработает, попробуйте

builder.Register(c => new NameValueCollection());
person Anton Gogolev    schedule 05.03.2010
comment
Добавьте несколько скобок к этому new NameValueCollection(), и все будет хорошо :) - person Peter Lillevold; 05.03.2010