Не удается разрешить коллекцию NameValueCollection с помощью Autofac - PullRequest
3 голосов
/ 05 марта 2010

Я использую 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?

1 Ответ

3 голосов
/ 05 марта 2010

Это по замыслу. См. Автопроводка :

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

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

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

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

builder.Register(c => new NameValueCollection());
...