2009-10-06 7 views
1

Je semble avoir un problème - plutôt inattendu; donc je suppose que je pourrais faire quelque chose de stupide/faux.Bug d'enregistrement/résolution de composant Autofac?

I enregistrer deux conteneurs services scope en tant que tels:

builder.Register<IServiceInfo>(c => CreateServiceInfo(c)).As<IServiceInfo>(); 
builder.Register<IServiceInfo>(c => CreateServiceInfoSomeOther(c)).As<IServiceInfo>().Named("someOther"); 

Maintenant, lorsque je tente de résoudre

container.Resolve<IServiceInfo>() 
and container.Resolve<IServiceInfo>("someOther") 

je reçois la même instance. Je m'attendrais à ce que le premier appel renvoie la première instance et le deuxième appel renvoie la deuxième instance. Pourquoi cela se passe-t-il de cette façon?

J'espère qu'il y a des experts Autofac actifs par ici et j'apprécierais toute aide pour résoudre ce problème rapidement.

Merci à tous!

+0

Merci pour les modifications Philip. –

Répondre

2

Lorsque deux services sont enregistrés, le dernier gagne (peu importe que le second soit nommé, il s'agit toujours d'un enregistrement pour ce service), sauf si vous demandez une instance par son nom.

Vous pouvez utiliser ".DefaultOnly()" pour modifier votre deuxième enregistrement de sorte que le premier soit la valeur par défaut. Voir le wiki page pour plus d'informations.

+0

Super, ça a fait l'affaire. Merci beaucoup! –

+0

Je voulais faire des commentaires, mais je ne suis pas assez réputation de le faire. Cette réponse a été extrêmement utile, d'autant plus que je ne pouvais pas trouver toute la documentation pour les anciennes versions Autofac partout en ligne! Toute personne qui utilise cette solution doit noter qu'il arrêtera l'enregistrement du nom de travailler avec la méthode IContainer.ResolveOptional (nom). Vous devez plutôt utiliser la méthode .Resolve (nom) et l'envelopper dans un bloc try/catch. – oligofren