我正在尝试使用配置文件注入构造函数参数,但似乎 autofac 仅支持内置基元类型,有什么建议吗?谢谢 以下是代码
{
"defaultAssembly": "Demo",
"components": [
{
"type": "demo.AddCalculator",
"services": [
{
"type": "demo.ICalculator",
"key": "add"
}
]
},
{
"type": "demo.ChainedCalculator",
"services": [
{
"type": "demo.ICalculator",
"key": "chain"
}
],
"parameters": {
"target": "add" # should reference to the add Calculator
}
}
]
}
简短版:你不能。
您将无法通过配置进行复杂的参数规范。由于配置必须从字符串反序列化,因此您指定的任何参数值都必须可从字符串转换。您可以在对象上实现类型转换来启用此功能,但这可能有点过头了。
来自文档:
在深入研究 JSON/XML 配置之前,请务必阅读模块 - 这解释了如何处理比基本 JSON/XML 组件注册允许的更复杂的场景。 JSON/XML 中的配置并不是编程配置的逐个功能替代,因此复杂的场景可能需要 JSON/XML 和模块的组合。
因此,您可能需要使用模块来满足您的配置需求 - 在模块中设置注册,它们使用 config 来注册满足您需求的正确模块集。
也可能并不是所有的东西都需要配置。在您的示例中,
ChainedCalculator
具有密钥服务要求。如果您唯一换出的是键控服务,请在代码中注册 ChainedCalculator
并仅注册配置中实际更改的内容。
最后,一个观察结果 - 文档中的配置显示了许多正在使用的选项(例如密钥服务),但绝大多数情况下不需要密钥服务。尝试严格控制“此实例转到此服务,但该实例转到此其他服务”可能表明存在设计问题。您通常应该能够按类型注入,这意味着您不需要将依赖项指定为参数。它会自动接线。