我有一个具有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>();
答案 0 :(得分:0)
在this MSDN page,有一个解决方案,可以在需要向构造函数添加参数时使用:
container.RegisterType<HostService>(new InjectionConstructor(parameter1, parameter2, parameter3))
我还会调查这是否有效:
commandLineValue
参数(构造函数重载)或<:li>的构造函数
commandLineValue
参数
醇>
如:
public HostService(ISchedulerService schedulerService, IConfigService configService, string commandLineValue = string.Empty)
{}
所以不需要提供第三个参数。