13
Compte tenu des services enregistrés:autofac <T> pour résoudre le nom de service
builder.RegisterType<Foo1>().Named<IFoo>("one").As<IFoo>();
builder.RegisterType<Foo2>().Named<IFoo>("two").As<IFoo>();
builder.RegisterType<Foo3>().Named<IFoo>("three").As<IFoo>();
Puis-je récupérer nommés implémentations de l'interface IFoo
en injectant quelque chose comme Func<string, IFoo>
?
public class SomeClass(Func<string, IFoo> foo) {
var f = foo("one");
Debug.Assert(f is Foo1);
var g = foo("two");
Debug.Assert(g is Foo2);
var h = foo("three");
Debug.Assert(h is Foo3);
}
Je sais que je peux le faire avec Meta<>
, mais je ne veux pas l'utiliser.
Excellente idée! Merci :). – ppiotrowicz
Modification mineure - le paramètre 'c' est temporaire; vous devez résoudre IComponentContext si vous voulez vous y accrocher comme ça. c => {var cc = c.Résolve(); return named => cc.Resolve (nommé); } –
@Nicholas: ah, bien sûr, c'est trop facile à oublier :) –