Harmonyプロキシ(Node.js)を使用してJavaScriptで記述された動的サービスロケーターを取得しようとしています。基本的に、新しいコンテナを作成します。
var container = new Container();
そうすれば、従来のサービスロケーターのように値を設定して取得できるようになります。
container.set('FM', {});
container.get('FM');
container.get('FM', function(FM) {
});
サブオブジェクトのように機能する名前空間を持つこともできます。
container.set('FM.Object', {});
問題は動的エイリアスにあります。
var App = container.alias('App');
エイリアスを作成すると、従来のオブジェクトのように操作できる新しいプロキシオブジェクトが作成されますが、これはメソッドのエイリアスget()
ですset()
。
それ以外の:
container.get('App.Hello');
エイリアスを使用すると、次を使用します。
App.Hello
問題は深い名前空間にあります。アクセスしようとしているとしましょう。App.Hello.World.Controller
これは、プロキシを一度に1つの名前空間を通過し、一度にすべてを通過するわけではないためです(完全な名前空間のように)。ユーザーがサービスロケーターに格納されている値を取得するために呼び出しているApp.Hello
かどうか、またはユーザーがより深い名前空間にアクセスし続けたいかどうかをどのように知ることができますか?あなたはできません(私が試したことから)。
これを達成する他の方法はありますか?
App.Hello.World
より深い名前空間にアクセスする場合はプロキシ、またはサービスロケーターに格納されている値のいずれかを返す構文を持つ。
var App = container.alias('App');
App.Controller.Home.Method.Index
// It would go through:
App -> Proxy
App.Controller -> Proxy or Value?
App.Controller.Home -> Proxy or Value?
App.Controller.Home.Method -> Proxy or Value?
App.Controller.Home.Method.Index -> Proxy or Value?
今、私は2つのオプションを扱うための規則をまとめました。値を取得するために単数形の名前を使用し、プロキシを返すために複数形を使用します。これはあまり効果的ではないため、簡単な「ハック」でした。
(説明や詳細情報が必要な場合は、私に知らせてください)