1

私はプロトタイピング中のサービス レイヤーに Agatha 要求/応答ライブラリ (および Agatha 1.0.5.0 で使用されている StructureMap) を使用しています。 . 一般に、要求/応答タイプのペアには独自のハンドラーが必要であることは理にかなっています。ただし、これは大規模なエンタープライズ環境にスケーリングされるため、大量のハンドラーになります。

私が始めたのは、エンタープライズ ドメインを論理的なプロセッサ クラス (数百、場合によっては数千のハンドラではなく、数十のプロセッサ) に分割することです。規則では、各リクエスト/レスポンス タイプ (すべて、Agatha から継承したドメイン ベースのリクエスト/レスポンス ペアから継承) は、どこかのプロセッサで正確に 1 つの関数を取得します。

汎用ハンドラー (Agatha の RequestHandler から継承) は、Handle メソッドでリフレクションを使用して、指定された TREQUEST/TRESPONSE のメソッドを検索し、それを呼び出します。見つからない場合、または複数見つかった場合は、エラー メッセージを含む TRESPONSE を返します (メッセージはドメインの基本応答クラスで標準化されています)。

ここでの目標は、企業全体の開発者が、ドメイン内の要求/応答タイプとプロセッサ関数を記述することに専念できるようにし、まったく同じことを行うハンドラー クラスを作成する追加のオーバーヘッドを費やす必要がないようにすることです (制御をプロセッサー機能)。

ただし、要求/応答タイプのペアごとにハンドラー クラスを定義する必要があるようです (ベース ハンドラーがすべてを処理するため、空ではありますが)。それ以外の場合、リクエストをサービスにディスパッチするときに次の例外がスローされます。

StructureMap 例外コード: 202 PluginFamily Agatha.ServiceLayer.IRequestHandler`1 に対して定義されたデフォルト インスタンスがありません]、Agatha.ServiceLayer、バージョン = 1.0.5.0、文化 = ニュートラル、PublicKeyToken = 6f21cf452a4ffa13

StructureMap や Agatha に、すべてのリクエスト/レスポンス タイプのペアに対して常に基本ハンドラ クラスを使用するように指示する方法はありますか? それとも、Reflection.Emit を使用して、要件を満たすためだけに、アプリケーションの開始時にメモリ内に空のハンドラーを生成するのでしょうか?

私はこれらのライブラリに 100% 精通しているわけではなく、学習しながら学んでいますが、これまでのところ、これらの可能なアプローチの両方を試してみましたが、うまくいきませんでした。誰かがこれを解決するためのアドバイスを提供できますか、それとも完全に別のアプローチを提供できますか?

4

1 に答える 1

2

私はアガサに精通していません。ただし、 のすべての要求をIRequestHandler<T>で満たすBaseHandler<T>必要がある場合は、次の StructureMap 登録を使用できます。

For(typeof(IRequestHandler<>)).Use(typeof(BaseHandler<>));

何かが を要求するとIRequestHandler<Foo>、 を取得する必要がありBaseHandler<Foo>ます。

于 2010-04-29T02:52:21.513 に答える