autofac的Func <t>来解析命名服务</t>

时间:2010-05-22 15:17:47

标签: c# .net dependency-injection ioc-container autofac

鉴于注册服务:

builder.RegisterType<Foo1>().Named<IFoo>("one").As<IFoo>();
builder.RegisterType<Foo2>().Named<IFoo>("two").As<IFoo>();
builder.RegisterType<Foo3>().Named<IFoo>("three").As<IFoo>();

我可以通过注入类似IFoo的内容来检索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);
}

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

1 个答案:

答案 0 :(得分:25)

您可以像这样注册自己的解析代表:

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