如何使用 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))
我也会调查这是否有效:
- 添加另一个不带
commandLineValue
参数的构造函数(构造函数重载)或:
- 设置
commandLineValue
参数为默认值
如:
public HostService(ISchedulerService schedulerService, IConfigService configService, string commandLineValue = string.Empty)
{}
所以不需要提供第三个参数
我有一个具有 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))
我也会调查这是否有效:
- 添加另一个不带
commandLineValue
参数的构造函数(构造函数重载)或: - 设置
commandLineValue
参数为默认值
如:
public HostService(ISchedulerService schedulerService, IConfigService configService, string commandLineValue = string.Empty)
{}
所以不需要提供第三个参数