InversifyJS:コンテナからオブジェクトを取得するときにエラーが発生しました

ジャックス

私はInversifyJSを使用して、ある種の動的バインディングをセットアップし、NodeJSで実行しています。私が抱えている問題は、エラーが発生することですが、メッセージはなく、スタックトレースのみです。

Mainクラス

export class Main {
    public static getCalculator(config: string): Calculator {
        try {
            var container: Container = new KeyFeatureContainer(config).getContainer();
            debugger;
            // error here !
            return container.get<Calculator>(TYPES.Calculator);
        } catch (error) {
            debugger;
            return null;
        }
    }
}

このクラスは、文字列を使用しKeyFeatureContainer呼び出し、jsonすべてのバインディングを(一種の動的な方法で)構成するために使用され、コンテナーを取得します。

KeyFeatureContainerクラス

export class KeyFeatureContainer {
    private _container: Container;

    public constructor(config: string) {
        var jsonConfig: any[] = JSON.parse(config);

        this._container = new Container();
        this._container.bind<Calculator>(TYPES.Calculator).to(KeyFeatureCalculator);

        for (var i = 0; i < jsonConfig.length; i++) {
            if (jsonConfig[i].active) {
                this.parseConfigKeyFeatures(jsonConfig[i].id);
                this.parseConfigParams(jsonConfig[i].params);
            }
        }
    }

    public getContainer(): Container {
        debugger;
        return this._container;
    }

    private parseConfigKeyFeatures(id: string): void {
        var keyFeatureContainerModule: ContainerModule = rootContainer.get<KeyFeatureContainerModule>(id).getContainerModule();

        if (keyFeatureContainerModule != null)
            this._container.load(keyFeatureContainerModule);
    }

    private parseConfigParams(params: Array<{ name: string, value: any }>): void {
        for (var param of params)
            this._container.bind(param.name).to(param.value);
    }
}

このクラスは、インターフェースと具象実装の間のバインディングを含むjsonIDに従って構成を受け取り、ロードしますContainerModule、IDに続いて取得rootContainerするContainerModule指定します。

ザ・ rootContainer

var rootContainer: Container = new Container();

rootContainer.bind<KeyFeatureContainerModule>(KEYFEATURES.DrugHoliday).to(DrugHolidayContainerModule);
rootContainer.bind<KeyFeatureContainerModule>(KEYFEATURES.MissingDay).to(MissingDayContainerModule);

export default rootContainer;

そして、関連するContainerModules(2番目のものは同一であり、それぞれで異なるPARAMSだけです)

@injectable()
export class MissingDayKeyFeature implements KeyFeature {
    @inject(PARAMS.MissingDayParams.NbIntakesLimit)
    private _nbIntakesLimit: number;

    @inject(PARAMS.MissingDayParams.ExtraParamA)
    private _extraParamA: any;

    @inject(PARAMS.MissingDayParams.ExtraParamB)
    private _extraParamB: any;

    public init(): void {
        console.log("init() at MissingDay");

        console.log("nbIntakesLimit = " + this._nbIntakesLimit);
        console.log("extraParamA = " + this._extraParamA);
        console.log("extraParamB = " + this._extraParamB);
    }

    public calculate(): void {
        console.log("calculate() at MissingDay");
    }

    public finish(): void {
        console.log("finish() at MissingDay");
    }
}

@injectable()
export class MissingDayContainerModule implements KeyFeatureContainerModule {
    public getContainerModule(): ContainerModule {
        return new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Unbind) => {
            bind<KeyFeature>(TYPES.KeyFeature).to(MissingDayKeyFeature);
        });
    }
}

そして最後に、ServiceIdentifiers全体(分離されたファイル)をセットアップするために使用されます

let TYPES = {
    KeyFeature: "KeyFeature",
    Calculator: "Calculator"
}

export default TYPES;

let PARAMS = {
    DrugHolidayParams: {
        NbDaysLimit: "nbDaysLimit",
        ExtraParamA: "extraParamDHA",
        ExtraParamB: "extraParamDHB"
    },
    MissingDayParams: {
        NbIntakesLimit: "nbIntakesLimit",
        ExtraParamA: "extraParamMDA",
        ExtraParamB: "extraParamMDB"
    }
}

export default PARAMS;

let KEYFEATURES = {
    MissingDay: "MissingDayKeyFeature",
    DrugHoliday: "DrugHolidayKeyFeature"
}

export default KEYFEATURES;

最後にJSON入力(便宜上フォーマットされています)

[{
        "id": "DrugHolidayKeyFeature",
        "active": true,
        "params": [{
                "name": "nbDaysLimit",
                "value": 3
            }, {
                "name": "extraParamDHA",
                "value": "DHA"
            }, {
                "name": "extraParamDHB",
                "value": "DHB"
            }
        ]
    }, {
        "id": "MissingDayKeyFeature",
        "active": false,
        "params": [{
                "name": "nbIntakesLimit",
                "value": 0
            }, {
                "name": "extraParamMDA",
                "value": "MDA"
            }, {
                "name": "extraParamMDB",
                "value": "MDB"
            }
        ]
    }
]

単純なTestスクリプトを使用して値を出力し、すべてのバインディングが正しく行われているかどうかを確認します

import { Main } from "./Main";
var json: string = *json above*;
Main.getCalculator(json).calculate();

しかし、私はこのエラーで終わります

Error
<     at _createSubRequests (D:\Projects\226RD\nodejs\phantomjs_2016_by_DM\final\node_modules\inversify\lib\planning\planner.js:106:19)
<     at Object.plan (D:\Projects\226RD\nodejs\phantomjs_2016_by_DM\final\node_modules\inversify\lib\planning\planner.js:125:5)
<     at D:\Projects\226RD\nodejs\phantomjs_2016_by_DM\final\node_modules\inversify\lib\container\container.js:205:37
<     at Container._get (D:\Projects\226RD\nodejs\phantomjs_2016_by_DM\final\node_modules\inversify\lib\container\container.js:198:44)
<     at Container.get (D:\Projects\226RD\nodejs\phantomjs_2016_by_DM\final\node_modules\inversify\lib\container\container.js:163:21)
<     at Function.getCalculator (D:\Projects\226RD\nodejs\phantomjs_2016_by_DM\final\transpiled\KFCalc\Main.js:9:30)
<     at Object.<anonymous> (D:\Projects\226RD\nodejs\phantomjs_2016_by_DM\final\transpiled\KFCalc\Test.js:4:13)
<     at Module._compile (module.js:573:32)
<     at Object.Module._extensions..js (module.js:582:10)
<     at Module.load (module.js:490:32)

何が起こっているのかについての手がかりはなく、私は自分が間違ったことを理解することができません。私もできませget<Calculator>get<KeyFeature>が、私がそうする場合:

container.isBound(TYPES.Calculator) // returns true !!!

同じことがすべてのバインドされたアイテムに適用されます。

ポインタをありがとう、私はアイデアがありません。

+-- @types/[email protected]
+-- [email protected]
+-- [email protected]
+-- [email protected]

編集:忘れた KeyFeatureCalculator

@injectable()
export class KeyFeatureCalculator implements Calculator {
    // multi-injection of bound key features
    private _keyFeatureCalculators: KeyFeature[] = [];

    public constructor(@multiInject(TYPES.KeyFeature) keyFeatureCalculators: KeyFeature[]) {
        this._keyFeatureCalculators = keyFeatureCalculators;
    }

    public calculate(): void {
        console.log("calculate() at KeyFeatureCalculator");

        for (var calculator of this._keyFeatureCalculators) {
            calculator.init();
            calculator.calculate();
            calculator.finish();
        }
    }
}

また、すべての私のファイル(またはほとんど)はinject, injectableからインポートinversify、またインポートしますreflect-metadata

ジャックス

エラーが解決されました:注意を払わなかった人のために、各KeyFeatureオブジェクトにはプロパティが挿入されており、そのタイプはnumberまたはanyです。値はmyから取得されるためJSON、として入力されます。anyしたがって、コンパイラーは、バインディングbind(xxx).to(yyy)newable要素である必要があることを警告しません

したがって、私の例では、yyyはのようなもの3でした。これは数値であるため、制限できません。私はに変更しbind(xxx).toConstantValue(yyy)、すべてが機能します!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オブジェクトをjsonにダンプするときにエラーが発生しました

分類Dev

反応フロントエンドからRailsAPIにjsonオブジェクトを渡すときにエラーが発生しました

分類Dev

有効なLatLngオブジェクトからLatLngBoundsオブジェクトを作成しようとしたときにエラーが発生しました

分類Dev

別のクラスのコンストラクターを参照してオブジェクトを渡すときにエラーが発生しました

分類Dev

NSStringオブジェクトをNSMutableArrayに追加するときにエラーが発生しました

分類Dev

オブジェクトから2Dベクトルを印刷するときにエラーが発生しました

分類Dev

コントローラにオブジェクトを挿入するとエラーが発生します

分類Dev

EntityFrameworkの移行で複雑なオブジェクトからフィールドを作成するときにエラーが発生しました

分類Dev

vbscriptのオブジェクトで配列インデックスを設定するときにエラーが発生しましたか?

分類Dev

Double型のオブジェクトを比較するときにエラーが発生しますか?

分類Dev

インテントを使用してパーセル可能なオブジェクトを渡すときにエラーが発生しました

分類Dev

このエラーが発生する理由を説明できますか:オブジェクトContactsAppでメソッドまたはプロパティgetContactsを取得中に予期しないエラーが発生しました

分類Dev

DiagrammeRで関数からGrVizに引数を渡すときにエラーが発生しました:「オブジェクトが見つかりません」

分類Dev

オブジェクトから整数に変換しようとしたときに無効なオブジェクトエラーが発生しました

分類Dev

PostgreSQLのjsonbから特定のオブジェクトを取得中にエラーが発生しました

分類Dev

インターフェイスXを実装するオブジェクトをインターフェイスXから継承するインターフェイスYに渡すときにエラーが発生しました。C#で

分類Dev

エントリオブジェクトからテキストを取得しようとすると、このエラーが発生するのはなぜですか?Tkinter AttributeError:CustomClassインスタンスに属性 'entry'がありませんか?

分類Dev

地理データをMongodbにインポートするときにエラーが発生しました:オブジェクトから地理キーを抽出できません、不正な形状のジオメトリ

分類Dev

CodeIgniter:2つのクエリが統合されたときに発生する「非オブジェクトのプロパティを取得しようとしています」エラーを修正するにはどうすればよいですか?

分類Dev

非オブジェクトの「id」プロパティを取得しようとしたときにLaravel5.8エラーが発生しました

分類Dev

タイプDataStreamのオブジェクトをコントローラーからApacheflinkとSpringbootを使用してビューに渡すときにエラーが発生しました

分類Dev

クリップボードからオブジェクトを貼り付けるときにエラーが発生しました

分類Dev

mongodbの別のオブジェクトにオブジェクトをプッシュするときにエラーが発生しました

分類Dev

'オブジェクトコンテキストで$ thisを使用して電子メールを送信するときにforgeを使用したサーバーでLaravelエラーが発生しました'

分類Dev

Angular5でlocalstorageオブジェクト関数を取得するときにエラーが発生しました

分類Dev

オブジェクトのインスタンスをベクターで検索するときにエラーが発生しました

分類Dev

IntからHex値に変換した後、16進値をDataオブジェクトに追加すると、エラーSwiftが発生しますか?

分類Dev

オブジェクトを解析しようとしたときにjqueryエラーが発生しました

分類Dev

Asp.Net4.7プロジェクトから.NetStandard2.0ライブラリを参照するときにエラーが発生しました

Related 関連記事

  1. 1

    オブジェクトをjsonにダンプするときにエラーが発生しました

  2. 2

    反応フロントエンドからRailsAPIにjsonオブジェクトを渡すときにエラーが発生しました

  3. 3

    有効なLatLngオブジェクトからLatLngBoundsオブジェクトを作成しようとしたときにエラーが発生しました

  4. 4

    別のクラスのコンストラクターを参照してオブジェクトを渡すときにエラーが発生しました

  5. 5

    NSStringオブジェクトをNSMutableArrayに追加するときにエラーが発生しました

  6. 6

    オブジェクトから2Dベクトルを印刷するときにエラーが発生しました

  7. 7

    コントローラにオブジェクトを挿入するとエラーが発生します

  8. 8

    EntityFrameworkの移行で複雑なオブジェクトからフィールドを作成するときにエラーが発生しました

  9. 9

    vbscriptのオブジェクトで配列インデックスを設定するときにエラーが発生しましたか?

  10. 10

    Double型のオブジェクトを比較するときにエラーが発生しますか?

  11. 11

    インテントを使用してパーセル可能なオブジェクトを渡すときにエラーが発生しました

  12. 12

    このエラーが発生する理由を説明できますか:オブジェクトContactsAppでメソッドまたはプロパティgetContactsを取得中に予期しないエラーが発生しました

  13. 13

    DiagrammeRで関数からGrVizに引数を渡すときにエラーが発生しました:「オブジェクトが見つかりません」

  14. 14

    オブジェクトから整数に変換しようとしたときに無効なオブジェクトエラーが発生しました

  15. 15

    PostgreSQLのjsonbから特定のオブジェクトを取得中にエラーが発生しました

  16. 16

    インターフェイスXを実装するオブジェクトをインターフェイスXから継承するインターフェイスYに渡すときにエラーが発生しました。C#で

  17. 17

    エントリオブジェクトからテキストを取得しようとすると、このエラーが発生するのはなぜですか?Tkinter AttributeError:CustomClassインスタンスに属性 'entry'がありませんか?

  18. 18

    地理データをMongodbにインポートするときにエラーが発生しました:オブジェクトから地理キーを抽出できません、不正な形状のジオメトリ

  19. 19

    CodeIgniter:2つのクエリが統合されたときに発生する「非オブジェクトのプロパティを取得しようとしています」エラーを修正するにはどうすればよいですか?

  20. 20

    非オブジェクトの「id」プロパティを取得しようとしたときにLaravel5.8エラーが発生しました

  21. 21

    タイプDataStreamのオブジェクトをコントローラーからApacheflinkとSpringbootを使用してビューに渡すときにエラーが発生しました

  22. 22

    クリップボードからオブジェクトを貼り付けるときにエラーが発生しました

  23. 23

    mongodbの別のオブジェクトにオブジェクトをプッシュするときにエラーが発生しました

  24. 24

    'オブジェクトコンテキストで$ thisを使用して電子メールを送信するときにforgeを使用したサーバーでLaravelエラーが発生しました'

  25. 25

    Angular5でlocalstorageオブジェクト関数を取得するときにエラーが発生しました

  26. 26

    オブジェクトのインスタンスをベクターで検索するときにエラーが発生しました

  27. 27

    IntからHex値に変換した後、16進値をDataオブジェクトに追加すると、エラーSwiftが発生しますか?

  28. 28

    オブジェクトを解析しようとしたときにjqueryエラーが発生しました

  29. 29

    Asp.Net4.7プロジェクトから.NetStandard2.0ライブラリを参照するときにエラーが発生しました

ホットタグ

アーカイブ