【问题标题】:InfersifyJS - how to conditionally load constantValueInfersifyJS - 如何有条件地加载常量值
【发布时间】:2019-12-16 00:46:42
【问题描述】:

我在 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;

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

快递文件

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

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

【问题讨论】:

    标签: typescript inversifyjs


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 2016-12-01
      • 2014-02-12
      • 2015-01-05
      • 2013-03-09
      • 2018-05-18
      相关资源
      最近更新 更多