简体   繁体   English

autofac的功能 <T> 解决命名服务

[英]autofac's Func<T> to resolve named service

Given registered services: 鉴于注册服务:

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

Can I retrieve named implementations of IFoo interface by injecting something like Func<string, IFoo> ? 我可以通过注入类似Func<string, IFoo>东西来检索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);
}

I know I can do it with Meta<> , but I don't want to use it. 我知道我可以用Meta<>做,但我不想用它。

You could register your own resolving delegate like this: 您可以像这样注册自己的解析代表:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM