0

特定の要件を持つモジュール (Autofac Web フォーム統合を使用して単純な ASP サイトで参照される) を作成しようとしています。特定のルール セットを使用して作成された文字列を返す必要があります。これらのルールは、「アクター」ごとに異なる戦略によって定義されます。「アクター」は、リクエストからの値に応じて実行時に選択されます。事態をさらに難しくするために、一部の「アクター」は、たとえばリクエストの国に基づいて、この戦略の異なる特定の実装を持つことができます。

私はすでに抽象ファクトリと具体的なファクトリを使用してこの問題を解決しました(最初にどの「アクター」の具体的なファクトリを使用するかを理解し、2番目に特定のアクターまたは一般的なアクターの戦略が必要かどうかを判断します)。問題は、強力なモジュール設計を採用しているため、特定のアクターの戦略クラスへの間接参照を取得するためにリフレクションを使用する必要があることです (そうでなければ、すべての特定の戦略実装を含むすべての dll への参照が必要です)。

主に、必要なコンポーネントを動的にロードする独自の方法を使用したいため、このアプローチは避けたいと思います。

Autofac の可能性をいくつか調べたところ、同じインターフェイスのさまざまな実装を登録し、ここで説明されているようにキーを使用して解決できることがわかりました ( https://code.google.com/p/autofac /wiki/TypedNamedAndKeyedServices )。問題は、抽象ファクトリと具象ファクトリ内でそれらを解決する方法がわからないことです(そこにリゾルバーへの参照がありません...そして、それを避けるべきだと思います)。

だから私の質問は:

1) そのシナリオで Autofac を使用するにはどうすればよいですか? ベストプラクティスは何ですか(確かに私は何か大きなものを見逃しています)

2) このモジュールのすべての設計を再考する必要がありますか? つまり、抽象ファクトリと具体的なファクトリを使用する必要がありますか?

3) 誰かが私の問題に関連している可能性のある例やチュートリアルを教えてもらえますか?

長くてわかりにくい質問で申し訳ありません。

4

1 に答える 1

1

考えられるアプローチの 1 つは、戦略を一般的な戦略とアクター固有の戦略に分割することです。あなたはすでに頭の中でそれを行っていますが、あなたのコードがそれを反映しているかどうかはわかりません。

  • との 2 つのインターフェイスIActorSpecificStrategyがありIGenericStrategyます。
  • bool CanHandleActor(IActor actor)両方のインターフェイス (または両方の派生元のインターフェイス) にメソッドを追加します。
  • 2 つの列挙型をファクトリに挿入します。1 つは を含みIActorSpecificStrategy、もう 1 つは を含みますIGenericStrategy
  • アクターの戦略が要求された場合、最初にすべてのIActorSpecificStrategyインスタンスを列挙し、返される最初のものをCanHandleActor返しますtrue。それ以外の場合は、 を返す最初IGenericStrategyのものをCanHandleActor返しますtrue

これが問題に当てはまらない場合は、戦略がどのように選択されているかを詳しく説明してください。

于 2013-04-12T11:34:39.857 に答える