代码之家  ›  专栏  ›  技术社区  ›  ppiotrowicz

autofac的func<t>解析命名服务

  •  13
  • ppiotrowicz  · 技术社区  · 16 年前

    提供注册服务:

    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 回复  |  直到 10 年前
        1
  •  25
  •   Peter Lillevold Rene    10 年前

    您可以这样注册自己的解析委托:

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