通常、Aureliaアプリケーションでは、import
はSomething
のインスタンスではありません。これはクラスSomething
です。 import
edのものを実際に使用するには、そのインスタンスが必要です。
import Something from 'whatever';
let something = new Something();
AureliaのDependency Injectionシステムを使用するときは、「Inversion of Control」というデザインパターンを使用しています。あなたのクラス(またはあなた)がその依存関係をインスタンス化するのではなく、それが持つ依存関係をリストし、そのコンストラクター関数に依存関係のインスタンスを挿入します。
これはテスト依存性の模擬インスタンスをテストフィクスチャのクラスに渡すことができるようになりました(テストでは、テストはモックをコンストラクタに渡し、AureliaのDIコンテナに依存しませんこれにより、依存関係注入コンテナのシングルトンやトランジェントなどのさまざまなオブジェクトライフスタイルを使用して依存関係を作成するように設定できるようになります。
は---私はコンストラクタ・インジェクションを使用して オーレリア・ビュー・モデルへのエクスポートデフォルトのクラスのものとして定義されたモジュールをインポートする場合、それはする必要はありません
---コメントからのOPの質問に答えるために編集します がインスタンス化されます。これは、Somethingクラスのインスタンスです。
これは、AureliaのDependency Injectionコンテナがインスタンスをインスタンス化しているためです。 、
import {inject} from 'aurelia-framework';
import Something from 'somewhere';
@inject(Something)
export class Foo {
constructor(something) {
this.something = something;
}
//...
}
としない
import Something from 'somewhere';
export class Foo {
constructor(Something) {
this.something = something;
}
//...
}
あなたはオーレリアを言っている「私はこれらのいずれかが、私にそれを与えてください必要があります」とアウレリアは「確実なことは言う:これはあなたのコードは次のようになります理由です私は1つを作成した、または私は既に1つの周りに横たわっていた、ここはそれです。
つまり、aureliaのコンストラクタDIは、クラスエクスポートを使用して しか動作せず、クラスをインスタンス化するように見えます。それは のように私のaureliaビュー モデルにモーメントjsのようなものをインポートしたい場合は、私はいつもやったことをやっておくべきです (aureliaのDIを使用していない)。それは正しいと思いますか?
これは正しいです。 moment
のようなライブラリは、Aureliaがインスタンス化できるクラスではなく、使用する関数を提供します。これらのために、あなたは過去のようにそれらを使い続けるでしょう。
依存性注入は良いことであり、モジュールと直交しています。モジュール上にDIを実装するシステムは存在しないため、コンストラクタに対してもそれを行います。 – Bergi