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

时间:2016-09-13 09:58:58

标签: c# inversion-of-control unity-container

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

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

我见过ParameterOverride()类,但如果已经注册了这些参数,我不想再重新定义前2个参数。我也不确定Unity如何选择贪婪的构造函数或细长的构造函数,具体取决于参数是否存在。

e.g。

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

如何让Unity正常注入服务,但也提供第3个值?

container.RegisterType<IHostService, HostService>();

1 个答案:

答案 0 :(得分:0)

this MSDN page,有一个解决方案,可以在需要向构造函数添加参数时使用:

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

我还会调查这是否有效:

  1. 添加另一个没有commandLineValue参数(构造函数重载)或<:li>的构造函数
  2. 使用默认值
  3. 设置commandLineValue参数

    如:

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

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