Não é possível resolver o NameValuEcollection com Autofac
-
24-09-2019 - |
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?
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());