14

InternalVisibleTo属性は、内部アクセス修飾子を持つタイプとメソッドを指定されたアセンブリに公開するために使用されることを理解しています。私はこれまで、一連の単体テストを含む別のアセンブリに内部メソッドを公開するためにこれを使用したことがあります。

これを使用する必要がある場合、別のシナリオを考えるのに苦労しています。この属性は、単体テストを支援するために特別に導入されたのですか、それとも別の理由がありましたか?

4

3 に答える 3

14

シナリオとしては、アセンブリ間でロジックが分離されている場合があります(内部データオブジェクトやロジックレイヤーなど)。クラスをユーザーに公開したくないが、それでも独自のアセンブリでオブジェクトを使用したい。

これはあまり一般的なシナリオではないと思いInternalsVisibleToます。単体テスト以外のコンテキストではほとんど使用しません。

于 2010-07-19T09:01:50.460 に答える
7

このシナリオはElishaのシナリオと似ていますが、ドメイン駆動設計でドメインモデルを正しく使用することを目的としています。

MyProject.Coreすべてのドメインモデルを含むアセンブリがあるとします。他の人がドメインモデルのインスタンスを直接作成したくない場合は、コンストラクターを作成できますinternal

と呼ばれる別のアセンブリにはMyProject.Services、有効なドメインオブジェクトの作成に特化したドメインサービスが含まれています。このアセンブリには、への参照がありMyProject.Coreます。この属性は、ドメインサービスアセンブリにコンストラクターInternalsVisibleToへのアクセスを許可するために使用されます。internal

MyProject.Servicesからの参照のもう1つの利点はMyProject.Core、ドメインオブジェクトがドメインサービスへの参照を保持できないことです。これは、別の優れたDDDプラクティスと見なされます。

注:上記のシナリオを実際に適用したことはないため、DDDレベルでは完全に正確ではない可能性があります。しかし、これはInternalsVisibleTo私が考えることができる使用法であり、単体テストに関連するものではありません。

于 2010-07-19T21:08:45.527 に答える
6

テストとは別に、私がこれまでにこのInternalsVisibleTo属性を使用した唯一の他のシナリオは、シリアル化アセンブリを作成するときでした。

それ以外は、使ったことがなく、必要もありませんでした。

于 2010-07-19T09:35:10.997 に答える