【问题标题】:Autofac - Injecting Keyed service with NamedParameter into constructorAutofac - 将带有 NamedParameter 的键控服务注入构造函数
【发布时间】:2020-02-19 15:53:05
【问题描述】:

我在 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。这可能吗?

【问题讨论】:

    标签: c# dependency-injection autofac


    【解决方案1】:

    NamedServiceKeyedService 的专用版本,其中密钥的类型为 String

    两个

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

    是等价的。

    你可以使用

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

    它会解析"x"类型的IMyService服务

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      相关资源
      最近更新 更多