Autofac - 将带有 NamedParameter 的键控服务注入构造函数

Autofac - Injecting Keyed service with NamedParameter into constructor

我在 Autofac 中注册了一个 Keyed 服务,我想通过构造函数注入它。 服务已注册

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

但是,我一直没能找到在构建过程中注入上述服务的方法。 Autofac 的 KeyFilterAttribute 只接受一个键;它似乎不允许 NamedParameters。这可能吗?

NamedServiceKeyedService 的特殊版本,其中键的类型为 String.

两个

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

是等价的。

您可以使用

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

它将解析类型为 IMyService

的名为 "x" 的服务