3

Visual Studio ライブラリ プロジェクトとして実装され、それぞれのアセンブリ (DLL) にコンパイルされる多くのモジュールで構成される大きな .NET プロジェクトがあります。

階層化されたアーキテクチャがあり、Visual Studio プロジェクト / アセンブリ間の参照を設定することで、モジュール / レイヤー間の依存関係を管理します。これにより、API/SPI を実装から分離し、個別のレイヤーを分離したままにすることができるため、アーキテクチャの制約を効果的に適用できます。

ただし、あるアセンブリにインポートされた型を、インポート元のアセンブリへの参照を持つ別のアセンブリに (推移的に) 再エクスポートしたい場合があります。

たとえば、次のように、型が assembly 、 assembly references 、および assembly referencesTで定義されているとします。ABACB

A <-- B <-- C

assemblyで参照を明示的に設定せずに、 assembly で型Tを「表示」したいと考えています。代わりにinへの参照をどうにかして再エクスポートしたいと考えています。CACAB

出来ますか?

PSなぜこれをしたいのですか?一部の型はアプリケーション全体で使用され (ユーティリティ/ヘルパー クラスまたは共通インターフェイスを考えてください)、これらの型に依存するすべてのプロジェクトで参照を複製するのは煩わしいためです。さらに、コードをリファクタリングして移動すると、参照が見つからないために多くのエラー メッセージが表示されます。

編集

明確にするために、ここに簡単な図を示します。

ここに画像の説明を入力

Consumer Bに依存するだけでなく、拡張するためB、にも依存します。ただし、のアセンブリとは別のアセンブリで が定義されている場合は、 のアセンブリへの参照も追加する必要があります (プロバイダにも同じことが当てはまります)。しかし、この参照を実際に追加する必要はありません。なぜなら、への依存は、依存して拡張するという事実に由来するからです。本当に必要なのは、どうにかして onの依存関係を再エクスポートすることです。ABAABAA BBABA

このシナリオはどのように出現するのでしょうか? インターフェイスが 1 つしかなく、共通インターフェイス ( )Bを抽出して別のアセンブリに配置し、他のモジュールが元のインターフェイスへの依存関係を追加せずに新しいインターフェイスを再利用できるようにすることにしたとします。これで、以前に使用されていたすべての場所で、新しいアセンブリへの参照を追加する必要があります。ABB

4

1 に答える 1

3

.net のアセンブリには属性があり、そこにあると予想されるタイプが別のアセンブリにあることをアセンブリに伝えることができます。

[assembly:TypeForwardedToAttribute(typeof(Example))]

Type Forwarding私にはhttp://msdn.microsoft.com/en-us/library/ms404275.aspxの使い方のように聞こえます

タイプ転送を簡単に説明するにはどうすればよいですか?も参照してください。

于 2013-08-27T13:11:16.950 に答える