如何使用配置文件将组件注入构造函数参数

问题描述 投票:0回答:1

我正在尝试使用配置文件注入构造函数参数,但似乎 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 
      }
    }
  ]
}
configuration autofac autofac-configuration
1个回答
0
投票

简短版:你不能。

您将无法通过配置进行复杂的参数规范。由于配置必须从字符串反序列化,因此您指定的任何参数值都必须可从字符串转换。您可以在对象上实现类型转换来启用此功能,但这可能有点过头了。

来自文档

在深入研究 JSON/XML 配置之前,请务必阅读模块 - 这解释了如何处理比基本 JSON/XML 组件注册允许的更复杂的场景。 JSON/XML 中的配置并不是编程配置的逐个功能替代,因此复杂的场景可能需要 JSON/XML 和模块的组合。

因此,您可能需要使用模块来满足您的配置需求 - 在模块中设置注册,它们使用 config 来注册满足您需求的正确模块集。

也可能并不是所有的东西都需要配置。在您的示例中,

ChainedCalculator
具有密钥服务要求。如果您唯一换出的是键控服务,请在代码中注册
ChainedCalculator
并仅注册配置中实际更改的内容。

最后,一个观察结果 - 文档中的配置显示了许多正在使用的选项(例如密钥服务),但绝大多数情况下不需要密钥服务。尝试严格控制“此实例转到此服务,但该实例转到此其他服务”可能表明存在设计问题。您通常应该能够按类型注入,这意味着您不需要将依赖项指定为参数。它会自动接线。

© www.soinside.com 2019 - 2024. All rights reserved.