私が関与しているプロジェクトでいくつかのアーキテクチャ上の問題に直面しています。プロジェクトは、DI、特に Unity によるコンストラクター注入に依存する ASP.NET MVC 2 アプリケーションです。アプリケーションは、サービスを他のモジュールに公開するいくつかのモジュール (各モジュールはアセンブリのセット) に分割されます。これらのサービスは、アプリケーションの起動時に Unity に登録されます。今まで特別なことは何もありません。私がこれを持っているとしましょう(各モジュールは単純化のためのアセンブリです):
モジュールA、モジュールB。
ModuleA は、次のメソッドを使用してサービス 'IServiceA' を公開します。
IServiceA (操作 1 - 操作 2 - 操作 3)
ModuleB の ServiceB は ModuleA の IServiceA を必要とし、コンストラクター インジェクション (具体的な実装を使用) によって取得します。次に、それを使用します。
問題は、ModuleA が非アクティブ化されている場合 (アプリケーションの起動時に現在のユーザーに対してモジュールがアクティブ化されているかどうかをデータベースで確認します)、serviceA が Unity に登録されていないことです。
Unity が IServiceA の登録を見つけることができず、ServiceB を構築できないため、実行時に例外が発生します。これは正常です。
それに対処するための一連のパターンまたはベストプラクティスがあることを知りたいです。私の最初のことは、ServiceB のコンストラクター注入を取り除くことでした。しかし、その後、ServiceA へのハード リファレンスを使用する必要がありますが、それが気に入らないか、さらに悪い ServiceLocator を使用する必要があります。ServiceA が利用可能かどうかにかかわらず、ModuleB をチェックインしたくありません。他にも多くのサービスがあり、純粋なインフラストラクチャ コードを処理する必要があるためです。serviceA が利用可能かどうか (可能かどうかわからない) の場合、ServiceB が同じコードを実行することを希望します。Gateway パターンを見ましたが、これが役立つかどうかわかりません。
どんな助けでも大歓迎です。
ありがとう、