我一直在使用InversifyJS来处理我的打字稿服务器上的 DI。关键是我想根据环境在我的代码上注入不同的实现。
有一个常见的场景,我想在生产中使用 S3,但在我的笔记本电脑上开发时使用本地文件夹。由于我使用 aninterface
来进行这种通信,因此可以选择使用两个不同的配置文件以及容器信息,但是在我的服务上使用条件加载容器是很脏的。
另一种选择是拥有一个配置文件,但根据环境配置一个或另一个实现。像这样的东西:
container.bind<IStorageRepository>(SERVICE_IDENTIFIER.STORAGE).to(
(process.env.ENVIRONMENT === 'prod') ? S3StorageRepository : LocalFolderStorageRepository
);
但我一点也不喜欢这样,因为如果你有三个(或更多)不同的环境有不同的需求,那就有点疯狂了。
有任何想法吗?