Web ホスト API サービスで ServiceStack を使用しており、しばらくの間使用しています。リクエストの実行パスは次のパターンに従います。
リクエストが届きます:
--> サービス (リクエストを処理し、コンストラクターを介して注入された IManager を利用)
--> IManager (ビジネス ロジックを実行し、コンストラクターを介して注入される IRepository/ies を利用)
--> IRepository/ies (SQL Server、NoSQL、コンストラクターによって注入された接続ファクトリーを利用)
別のクライアントを楽しませているので、これらのリクエストの一部は、わずかに異なるビジネス ロジックに従う必要があり、異なるレポ戦略を利用する可能性があります。ただし、API の一貫性は維持されます。この目的のために、クライアント固有のロジック (上記の具体的な IManager および IRepository の実装) を抽出して、アセンブリを分離しています。現在のリクエスト コンテキストを検査し、このリクエストの対象となるクライアントを特定するコンポーネントを作成しました。次に、リフレクションとアクティベーターを使用して、特定のリクエストに対して実行する特定の実装のインスタンスをインスタンス化します。
ただし、このため、起動時にコンテナーに IManager と IRepository の実装を登録することはできません。これは、要求ごとに動的に解決する必要があります。何らかの種類の LazyResolve を実行したいのですが、ここから始めるためにこれがどのように行われるかの具体的な例が見つかりません。
ここで私はクレイジーだと思いますか?私の API は、基本的にはこれだけです。発生するカスタム ロジックは、実行時に呼び出されるクライアント固有のアセンブリに分離されます。これは理論的には完全に理にかなっていますが、実際には難しいことがわかります。考え?アイデア?