Autofa c - Внедрение службы Keyed с NamedParameter в конструктор - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть служба Keyed, зарегистрированная в Autofa c, которую я хотел бы внедрить через конструктор. Служба зарегистрирована

builder.Register((ctx, par) =>
{
    var namedParameter = par.Named<string>("myNamedParameter");
    ... configuration and instantiation ...
}).Keyed<IMyService>(myKey);

и в настоящее время решается явно

public class MyConsumer {
    private readonly IMyService _myService;

    //current
    public MyConsumer(ILifetimeScope scope) {
        _myService = _scope.ResolveKeyed<IMyService>(myKey, new NamedParameter("myNamedParameter", "parameterValue"));
    }

    //preferred
    public MyConsumer(IMyService myService) {
        _myService = myService;
    }
}

Однако я не смог найти способ, чтобы эта служба была введена во время строительства. Autofa c s KeyFilterAttribute принимает только ключ; кажется, что он не учитывает NamedParameters. Это возможно?

1 Ответ

1 голос
/ 19 февраля 2020

NamedService - это специализированная версия KeyedService, где ключ имеет тип String.

, оба

c.RegisterType<T>().Named<IT>("x"); 
c.RegisterType<T>().Keyed<IT>("x");

эквивалентны.

Вы можете использовать

public MyConsumer([KeyFilter("x")]IMyService myService) {
    _myService = myService;
}

, и это разрешит службу с именем "x" типа IMyService

...