Emberjs-app-concrn-dependency-injection
EmberJS-依存性注入
これは、あるオブジェクトの依存関係を別のオブジェクトに提供するプロセスであり、オブジェクトとオブジェクト間の依存関係クラスを宣言およびインスタンス化するためにEmberアプリケーションによって使用されます。 _Ember.Application_および_Ember.ApplicationInstance_クラスは、Emberの依存性注入の実装で重要な役割を果たします。
_Ember.Application_クラスはオブジェクトを宣言および構成し、依存関係宣言の「レジストリ」として使用されます。_Ember.ApplicationInstance_クラスはインスタンス化されたオブジェクトの「所有者」として機能します。 ただし、_Ember.Application_クラスはアプリケーションのプライマリレジストリとして機能し、各_Ember.ApplicationInstance_クラスはレジストリとして機能します。
工場登録
ファクトリは、ルート、テンプレートなどのアプリケーションパーツを指定します。 特定のキーで登録されます。 たとえば、インデックステンプレートは_template:index_で定義され、アプリケーションルートは_route:application_で定義されます。
登録キーには2つの部分が含まれます。 1つは工場タイプ、2つ目は工場の名前、両方のセグメントはコロン(:)で分割されています。 たとえば、_Logger factory_を_logger:main key_に登録することにより、アプリケーションを初期化できます。
工場注入
一度登録すると、ファクトリを注入できます。 たとえば、次のコードを考慮してください-
すべてのタイプのルートファクトリは_mylog_プロパティで表され、このプロパティの値は_mylog:logmsg_ファクトリから取得されます。 また、完全なキーを使用して特定の工場に注入することもできます-
ここでは、_mylog_プロパティのみがインデックスルートに挿入されます。
ファクトリインスタンスのルックアップ
ファクトリインスタンスの_lookup_メソッドをアプリケーションインスタンスで使用して、実行中のアプリケーションからインスタンス化されたファクトリを取得できます。 文字列を使用してファクトリを決定し、オブジェクトを返します。
たとえば、アプリケーションインスタンスで_lookup_メソッドを呼び出して、以下に示すようにインスタンス化されたファクトリをフェッチできます-
例
以下に示す例は、Emberアプリケーションでのファクトリ登録、インジェクション、およびインスタンスルックアップの使用を示しています。 _app/components/_の下に定義される_dependency-inject_という名前のコンポーネントを作成します。 _dependency-inject.js_ファイルを開き、次のコードを追加します-
今コンポーネントテンプレートファイル_app/templates/components/dependency-inject.hbs_を開き、次のコードを入力してください-
_application.hbs_ファイルを開き、次のコード行を追加します-
私たちは、次のコマンドを使用して、アプリケーションを構成するイニシャライザを作成する必要があります-
_app/initializers/_の下に作成された_init.js_ファイルを開き、次のコードを追加します-
アプリケーションのさまざまな部分で利用できるサービスを作成します。 次のコマンドを使用して、サービスを作成します-
今、次のコードで_app/services/_の下に作成された_message.js_サービスファイルを開きます-
次に、起動時にアプリケーションを構成する初期化子を作成します。 初期化子は、次のコマンドを使用して作成できます-
次のコードで_app/initializers/_の下に作成された_logger.js_初期化ファイルを開きます-
次に、次のコマンドを使用して、アプリケーションのインスタンス初期化子を作成します-
次のコードで_app/instance-initializers/_の下に作成された_logger.js_初期化ファイルを開きます-
出力
emberサーバーを実行します。次の出力が表示されます-
次に、[ここをクリック]ボタンをクリックします。下のスクリーンショットに示すように、サービスページのテキストが表示されます-
今すぐコンソールに移動し、上記のスクリーンショットのようにテキストが表示された後にインスタンス初期化子から表示されるログメッセージを確認します-
次に、_schedule Tasks_ボタンをクリックして、優先順位で処理されるキューでの作業をスケジュールします-