Ne peut pas résoudre NameValueCollection avec Autofac
-
24-09-2019 - |
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?
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());