問題タブ [funq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
223 参照

dependency-injection - リフレクションによるServiceStackのFunq型登録?

私はキャッスルウィンザーをかなり使ってきました。リフレクションを介して型を登録するための非常に便利な機能があります。たとえば、アプリケーションの起動時に次のようにします。

たとえば、データ フォーマット用のプロバイダーがたくさんあるとします。その 1 行で (インターフェイス経由で) それらすべてを登録できます。さらに良いことに、新しいものを作成すると (同じアセンブリと同じインターフェイスにあると仮定して)、それらも登録されます。それらをコーディングするときにこれを行うことを覚えておく必要はありません。

FunqコンテナのServiceStackの実装に相当するものはありますか? 辺りを見回しましたが、一つもないようです。

0 投票する
1 に答える
91 参照

servicestack - ServiceStack の Funq を使用して依存関係を LazyResolve する

Web ホスト API サービスで ServiceStack を使用しており、しばらくの間使用しています。リクエストの実行パスは次のパターンに従います。

リクエストが届きます:

--> サービス (リクエストを処理し、コンストラクターを介して注入された IManager を利用)

--> IManager (ビジネス ロジックを実行し、コンストラクターを介して注入される IRepository/ies を利用)

--> IRepository/ies (SQL Server、NoSQL、コンストラクターによって注入された接続ファクトリーを利用)

別のクライアントを楽しませているので、これらのリクエストの一部は、わずかに異なるビジネス ロジックに従う必要があり、異なるレポ戦略を利用する可能性があります。ただし、API の一貫性は維持されます。この目的のために、クライアント固有のロジック (上記の具体的な IManager および IRepository の実装) を抽出して、アセンブリを分離しています。現在のリクエスト コンテキストを検査し、このリクエストの対象となるクライアントを特定するコンポーネントを作成しました。次に、リフレクションとアクティベーターを使用して、特定のリクエストに対して実行する特定の実装のインスタンスをインスタンス化します。

ただし、このため、起動時にコンテナーに IManager と IRepository の実装を登録することはできません。これは、要求ごとに動的に解決する必要があります。何らかの種類の LazyResolve を実行したいのですが、ここから始めるためにこれがどのように行われるかの具体的な例が見つかりません。

ここで私はクレイジーだと思いますか?私の API は、基本的にはこれだけです。発生するカスタム ロジックは、実行時に呼び出されるクライアント固有のアセンブリに分離されます。これは理論的には完全に理にかなっていますが、実際には難しいことがわかります。考え?アイデア?