Impossibile risolvere NameValueCollection con Autofac
-
24-09-2019 - |
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?
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());