本文介绍了autofac的Func键< T>解决命名服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于注册的服务:

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键<字符串,IFoo的>

Can I retrieve named implementations of IFoo interface by injecting something like 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);
}



我知道我可以用元<做到这一点;> ; ,但我不希望使用它

推荐答案

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

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

这篇关于autofac的Func键&LT; T&GT;解决命名服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-22 11:06