繁体   English   中英

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

[英]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 这可能吗?

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类型的IMyService

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM