【问题标题】:IOC containers in NPM packagesNPM 包中的 IOC 容器
【发布时间】:2021-07-01 07:55:45
【问题描述】:
在我们公司,我们有内部 SDK,有时在这些 SDK 中使用 inversify 可能会很方便。
但是,我发现管理不同包之间的所有 IOC 容器变得很困难。比如包A依赖包B,那么你需要合并这两个包的容器,然后应用程序C会导入包B和A,然后它必须重新合并所有这些容器。
因此,如果这甚至是在 SDK 中使用 IOC 容器的好方法,那么我正在尝试解决问题。我个人从未见过提供 IOC 容器的 SDK。
有什么想法吗?
【问题讨论】:
标签:
node.js
typescript
npm
inversifyjs
【解决方案1】:
经过深思熟虑,以下是我对在 SDK 中包含 IOC 容器的想法。
-
它将 SDK 与 IOC 容器的实现结合在一起,这使得在不使用特定容器的项目中重用这个 sdk 变得很困难,比方说 inversify。
-
那么我们如何在没有 IOC 容器的情况下实现 DI/IOC?
当我们想到 SDK 时,我们应该想到:
- 我们应该向外界提供什么样的 API
- 有什么特点
可以定制(是的,并非所有内部组件都应该是
可定制)
如果我们在 SDK 内部使用 IOC 容器,然后我们将这个 ioc 容器提供给外部世界,我们就相当于吐出了所有内部组件,从而违反了封装性。
我认为在没有 IOC 容器的情况下为 SDK 中的子类提供实现是完全正常的,如果我们想允许外部世界自定义该实现,那么我们提供的公共 API 应该允许这种定制化。
现在,当我审视这些镜头时,我认为 IOC 容器不应该在 SDK 中。