我一直在使用InversifyJS来处理类型记录服务器上的DI。关键是我希望根据环境在代码上注入不同的实现。
有一个常见的场景,当我在笔记本电脑上开发时,我想在生产中使用S3,但是使用本地文件夹。由于我使用一个interface来进行这种通信,一个选项是有两个带有容器信息的不同配置文件,但是在我的服务上加载容器是非常脏的。
另一个选项是有一个配置文件,但根据环境配置一个或另一个实现。就像这样:
container.bind<IStorageRepository>(SERVICE_IDENTIFIER.STORAGE).to(
(process.env.ENVIRONMENT === 'prod') ? S3StorageRepository : LocalFolderStorageRepository
);但我一点也不喜欢这样,因为如果你有三个(或更多)不同的环境,有不同的需求,那么它就会变得有点疯狂。
有什么想法吗?
发布于 2018-12-23 03:42:50
在您的示例中,选择正确实现的过程从.to()中移出。你可以在上面处理。分配给一个链接并将它传递到那里。在我的项目中出现这样的情况。我将容器组装过程隐藏在构建器函数中。以命令的方式你可以处理所有事情。
https://stackoverflow.com/questions/50639575
复制相似问题