Pergunta

Estou usando o Autofac 2.1.12 para lidar com minha injeção de dependência e estou tendo problemas com um problema específico. Não consigo resolver uma dependência NameValuEcollection.

Considere o seguinte snippet de código:

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>();
    }
}

Ele travará com uma dependencyResolutionExceptionexception não tratada:

Dependência do componente circular detectado: foo -> system.collections.specialized.nameValuecollection -> system.collection.specialized.nameValuecollection.

No entanto, se eu substituir o NameValuEcollection por qualquer outro tipo, o código funcionará bem.

Estou fazendo algo mencionado, há algo especial no tipo NameValuEcollection que estou perdendo, ou isso é um problema com o próprio Autofac?

Foi útil?

Solução

Isso é por design. Ver Autowiring:

O Autofac escolhe automaticamente o construtor com mais parâmetros que podem ser obtidos no contêiner.

Tente se registrar NameValueCollection Assim (no entanto, não tem certeza se isso funcionará):

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

Se isso não funcionar, tente

builder.Register(c => new NameValueCollection());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top