Question

J'utilise Autofac 2.1.12 pour gérer mon injection de dépendance, et je rencontre des problèmes avec un problème spécifique. Je ne peux pas sembler résoudre une dépendance NameValueCollection.

Considérons l'extrait de code suivant:

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

Il se brisera avec une DependencyResolutionException non gérée:

  

dépendance de composant circulaire   détectée: Foo ->   System.Collections.Specialized.NameValueCollection   -.> System.Collections.Specialized.NameValueCollection

Cependant, si je remplace NameValueCollection avec tout autre type, le code fonctionne très bien.

Est-ce que je fais quelque chose wroing, est-il quelque chose de spécial au sujet du type NameValueCollection que je suis absent, ou est-ce un problème avec Autofac lui-même?

Était-ce utile?

La solution

est par la conception. Voir Autowiring :

  

Autofac choisit automatiquement le constructeur avec la plupart des paramètres qui peuvent être obtenus à partir du récipient.

Essayez de vous enregistrer NameValueCollection comme si (pas sûr si cela fonctionne, bien):

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

Si cela ne fonctionne pas, essayez

builder.Register(c => new NameValueCollection());
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top