No se puede resolver NameValuecollection con AutoFAC
-
24-09-2019 - |
Pregunta
Estoy usando AutoFAC 2.1.12 para manejar mi inyección de dependencia, y tengo problemas con un problema específico. Parece que no puedo resolver una dependencia de NameValuecollection.
Considere el siguiente fragmento 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>();
}
}
Se bloqueará con una DependencyResolutionException no controlada:
Dependencia de los componentes circulares detectados: foo -> system.collections.specialized.nameValueCollection -> system.collections.specialized.nameValueCollection.
Sin embargo, si reemplazo nameValueCollection con cualquier otro tipo, el código funciona bien.
¿Estoy haciendo algo de estiramiento, ¿hay algo especial en el tipo de nombre de nombre que me falta, o es un problema con Autofac en sí?
Solución
Esto es por diseño. Ver Autos:
AutoFAC elige automáticamente el constructor con la mayoría de los parámetros que se pueden obtener del contenedor.
Intenta registrarse NameValueCollection
Como así (no estoy seguro de si esto funcionará):
builder.RegisterType<NameValueCollection>().UsingConstructor();
Si eso no funciona, intente
builder.Register(c => new NameValueCollection());