1

我一直在使用InversifyJS来处理我的打字稿服务器上的 DI。关键是我想根据环境在我的代码上注入不同的实现。

有一个常见的场景,我想在生产中使用 S3,但在我的笔记本电脑上开发时使用本地文件夹。由于我使用 aninterface来进行这种通信,因此可以选择使用两个不同的配置文件以及容器信息,但是在我的服务上使用条件加载容器是很脏的。

另一种选择是拥有一个配置文件,但根据环境配置一个或另一个实现。像这样的东西:

container.bind<IStorageRepository>(SERVICE_IDENTIFIER.STORAGE).to(
    (process.env.ENVIRONMENT === 'prod') ? S3StorageRepository : LocalFolderStorageRepository
);

但我一点也不喜欢这样,因为如果你有三个(或更多)不同的环境有不同的需求,那就有点疯狂了。

有任何想法吗?

4

1 回答 1

0

在您的情况下,选择正确实现的过程从 .to() 移出。你可以在上面处理它。分配给一个链接并将其传递给那里。在我的项目中针对此类情况。我将容器组装过程隐藏到构建器函数中。以命令式的方式,您可以处理所有事情。

于 2018-12-23T03:42:50.460 回答