2010-05-22 44 views
13

鑑於註冊的服務?autofac的Func鍵<T>來解析名爲服務

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

我知道我可以用Meta<>來做,但我不想用它。

回答

25

你可以註冊自己的解決委託這樣的:

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

好主意!謝謝 :)。 – ppiotrowicz 2010-05-22 17:34:26

+3

小編輯 - 'c'參數是臨時的;如果你想像這樣掛住它,你需要解析IComponentContext。 c => {var cc = c.Resolve (); return named => cc.Resolve (named); } – 2010-05-28 22:44:02

+0

@尼古拉斯:啊,當然,這太容易忽略:) – 2010-05-28 23:57:11