2010-05-22 17 views
13

Verilen kayıtlı hizmetler adında halletmeye çalıştığı?AutoFac en Func <T> hizmet

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

ben Meta<> ile yapabilirsiniz biliyorum ama kullanmak istemiyorum.

cevap

25

Böyle Kendi çözme temsilci kayıt olabilir:

builder.Register<Func<string, IFoo>>(c => 
    { 
     var cc = c.Resolve<IComponentContext>(); 
     return named => cc.ResolveNamed<IFoo>(named); 
    }); 
+0

Büyük fikir! Teşekkürler :). – ppiotrowicz

+3

Küçük düzenleme - 'c' parametresi geçicidir; Buna asmak isterseniz IComponentContext'i çözmeniz gerekir. c => {var cc = c.Resolve (); return => cc.Resolve (named); } –

+0

@Nicholas: ah, elbette, gözden kaçırmak çok kolay :) –