Func autofac <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<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<>, но я не хочу использовать его.

13
задан filmor 19 September 2014 в 14:23
поделиться

1 ответ

Вы можете зарегистрировать свой собственный разрешающий делегат следующим образом:

builder.Register<Func<string, IFoo>>(c =>
    {
        var cc = c.Resolve<IComponentContext>();
        return named => cc.ResolveNamed<IFoo>(named);
    });
27
ответ дан 1 December 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: