InfersifyJS - 如何有条件地加载常量值

InfersifyJS - how to conditionally load constantValue

我在 typescript + NODE.js 应用程序中使用了 inversifyJS。我有不同的环境不同的配置:

配置制作

const CONFIG_PRODUCTION: Object = {
    PATH_TO_STATIC_FILES: '../web/build',
    SECURE_COOKIE: false
};

export default CONFIG_PRODUCTION;

配置开发

const CONFIG_DEVELOPMENT: Object = {
    PATH_TO_STATIC_FILES: 'build/web/build',
    SECURE_COOKIE: true
};

export default CONFIG_DEVELOPMENT;

现在,在我的推断容器配置中,我的设置如下所示:

反转配置

const dependencyContainer = new Container();
dependencyContainer.bind(TYPES.ENVIRONMENTAL_CONFIG).toDynamicValue(
    (context: interfaces.Context) => context ? CONFIG_PRODUCTION : CONFIG_DEVELOPMENT);
...

export default dependencyContainer;

现在我在哪里可以决定如何加载所需的配置对象?在我的 class 中,我目前像这样注入 属性:

快递文件

constructor(
    @inject(TYPES.ENVIRONMENTAL_CONFIG) private config: Object
) {
    ...
    console.log(config) // prints development config
}

inversify 是否提供类似 setContext() 的功能?

我想到了将 属性 与依赖容器上的 toFactory 方法绑定的解决方案:

dependencyContainer.bind(TYPES.ENVIRONMENTAL_CONFIG).toFactory(
    () => (context: interfaces.Context) => context ? CONFIG_PRODUCTION : CONFIG_DEVELOPMENT);

之后我将工厂作为函数注入到我使用的 class:

constructor(@inject(TYPES.ENVIRONMENTAL_CONFIG) private environmentFactory: Function) {
    this.environmentalProps = this.environmentFactory(isProduction);
  }