Domanda

Sto usando Autofac 2.1.12 per gestire il mio iniezione di dipendenza, e sto avendo difficoltà con un problema specifico. Non riesco a risolvere una dipendenza NameValueCollection.

Si consideri il seguente frammento di codice:

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

Si andrà in crash con un DependencyResolutionException non gestita:

  

circolari dipendenza componente   rilevato: Foo ->   System.Collections.Specialized.NameValueCollection   -.> System.Collections.Specialized.NameValueCollection

Tuttavia, se sostituisco NameValueCollection con qualsiasi altro tipo, il codice funziona bene.

Sto facendo qualcosa di wroing, c'è qualcosa di speciale per il tipo NameValueCollection che mi manca, o si tratta di un problema con i Autofac stessa?

È stato utile?

Soluzione

Questo legato alla progettazione. Vedere autowiring :

  

Autofac sceglie automaticamente il costruttore con il maggior numero di parametri che sono in grado di ottenere dal contenitore.

Prova registrazione NameValueCollection in questo modo (non so se questo lavoro sarà, però):

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

Se questo non funziona, provare

builder.Register(c => new NameValueCollection());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top