autofac的Func键来解析名为服务

问题描述:

鉴于注册的服务?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<>来做,但我不想用它。

你可以注册自己的解决委托这样的:

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