Visual Studio ライブラリ プロジェクトとして実装され、それぞれのアセンブリ (DLL) にコンパイルされる多くのモジュールで構成される大きな .NET プロジェクトがあります。
階層化されたアーキテクチャがあり、Visual Studio プロジェクト / アセンブリ間の参照を設定することで、モジュール / レイヤー間の依存関係を管理します。これにより、API/SPI を実装から分離し、個別のレイヤーを分離したままにすることができるため、アーキテクチャの制約を効果的に適用できます。
ただし、あるアセンブリにインポートされた型を、インポート元のアセンブリへの参照を持つ別のアセンブリに (推移的に) 再エクスポートしたい場合があります。
たとえば、次のように、型が assembly 、 assembly references 、および assembly referencesT
で定義されているとします。A
B
A
C
B
A <-- B <-- C
assemblyで参照を明示的に設定せずに、 assembly で型T
を「表示」したいと考えています。代わりにinへの参照をどうにかして再エクスポートしたいと考えています。C
A
C
A
B
出来ますか?
PSなぜこれをしたいのですか?一部の型はアプリケーション全体で使用され (ユーティリティ/ヘルパー クラスまたは共通インターフェイスを考えてください)、これらの型に依存するすべてのプロジェクトで参照を複製するのは煩わしいためです。さらに、コードをリファクタリングして移動すると、参照が見つからないために多くのエラー メッセージが表示されます。
編集
明確にするために、ここに簡単な図を示します。
Consumer B
に依存するだけでなく、拡張するためB
、にも依存します。ただし、のアセンブリとは別のアセンブリで が定義されている場合は、 のアセンブリへの参照も追加する必要があります (プロバイダにも同じことが当てはまります)。しかし、この参照を実際に追加する必要はありません。なぜなら、への依存は、依存して拡張するという事実に由来するからです。本当に必要なのは、どうにかして onの依存関係を再エクスポートすることです。A
B
A
A
B
A
A
B
B
A
B
A
このシナリオはどのように出現するのでしょうか? インターフェイスが 1 つしかなく、共通インターフェイス ( )B
を抽出して別のアセンブリに配置し、他のモジュールが元のインターフェイスへの依存関係を追加せずに新しいインターフェイスを再利用できるようにすることにしたとします。これで、以前に使用されていたすべての場所で、新しいアセンブリへの参照を追加する必要があります。A
B
B