如何使用 Unity 将附加参数标记到构造函数上并注入依赖项?

How to tag additional parameter onto constructor and inject dependencies using Unity?

我有一个具有 2 个服务接口依赖项的主机服务,但我想在构造函数中标记第三个字符串参数。目前前 2 个已经注册,因此在解析时正确提供。

根据我的服务是从命令行启动还是从命令主机启动(使用 TopShelf),我希望能够从命令行注入第三个值,如果未提供则提供空值或调用构造函数只有 2 个接口依赖项。

我看过 ParameterOverride() class 但我不想再次重新定义前 2 个参数(如果它们已经注册)。我也不确定 Unity 如何根据参数是否存在来选择贪婪构造函数或苗条构造函数。

例如

  public HostService(ISchedulerService schedulerService,
                     IConfigService configService,
                     string commandLineValue)
        { }

如何让 Unity 正常注入服务并提供第三个值?

container.RegisterType<IHostService, HostService>();

this MSDN page处,当你需要给构造函数添加参数时,有一个解决方案:

container.RegisterType<HostService>(new InjectionConstructor(parameter1, parameter2, parameter3))

我也会调查这是否有效:

  1. 添加另一个不带 commandLineValue 参数的构造函数(构造函数重载)或:
  2. 设置 commandLineValue 参数为默认值

如:

public HostService(ISchedulerService schedulerService, IConfigService configService, string commandLineValue = string.Empty)
{}

所以不需要提供第三个参数