13
Given zarejestrowane usługi:autofac za Func <T> aby rozwiązać nazwie usługa
builder.RegisterType<Foo1>().Named<IFoo>("one").As<IFoo>();
builder.RegisterType<Foo2>().Named<IFoo>("two").As<IFoo>();
builder.RegisterType<Foo3>().Named<IFoo>("three").As<IFoo>();
można pobrać nazwane implementacje IFoo
interfejsu wstrzykując coś podobnego 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);
}
Wiem, że mogę to zrobić z Meta<>
, ale nie chcę z niego korzystać.
świetny pomysł! Dzięki :). – ppiotrowicz
Drobna edycja - parametr "c" jest tymczasowy; musisz rozwiązać IComponentContext, jeśli chcesz zawiesić się na nim w ten sposób. c => {var cc = c.Resolve(); return named => cc.Resolve (nazwany); } –
@Nicholas: ah, oczywiście, to zbyt łatwo przeoczyć :) –