InternalVisibleTo属性は、内部アクセス修飾子を持つタイプとメソッドを指定されたアセンブリに公開するために使用されることを理解しています。私はこれまで、一連の単体テストを含む別のアセンブリに内部メソッドを公開するためにこれを使用したことがあります。
これを使用する必要がある場合、別のシナリオを考えるのに苦労しています。この属性は、単体テストを支援するために特別に導入されたのですか、それとも別の理由がありましたか?
InternalVisibleTo属性は、内部アクセス修飾子を持つタイプとメソッドを指定されたアセンブリに公開するために使用されることを理解しています。私はこれまで、一連の単体テストを含む別のアセンブリに内部メソッドを公開するためにこれを使用したことがあります。
これを使用する必要がある場合、別のシナリオを考えるのに苦労しています。この属性は、単体テストを支援するために特別に導入されたのですか、それとも別の理由がありましたか?
シナリオとしては、アセンブリ間でロジックが分離されている場合があります(内部データオブジェクトやロジックレイヤーなど)。クラスをユーザーに公開したくないが、それでも独自のアセンブリでオブジェクトを使用したい。
これはあまり一般的なシナリオではないと思いInternalsVisibleTo
ます。単体テスト以外のコンテキストではほとんど使用しません。
このシナリオはElishaのシナリオと似ていますが、ドメイン駆動設計でドメインモデルを正しく使用することを目的としています。
MyProject.Core
すべてのドメインモデルを含むアセンブリがあるとします。他の人がドメインモデルのインスタンスを直接作成したくない場合は、コンストラクターを作成できますinternal
。
と呼ばれる別のアセンブリにはMyProject.Services
、有効なドメインオブジェクトの作成に特化したドメインサービスが含まれています。このアセンブリには、への参照がありMyProject.Core
ます。この属性は、ドメインサービスアセンブリにコンストラクターInternalsVisibleTo
へのアクセスを許可するために使用されます。internal
MyProject.Services
からの参照のもう1つの利点はMyProject.Core
、ドメインオブジェクトがドメインサービスへの参照を保持できないことです。これは、別の優れたDDDプラクティスと見なされます。
注:上記のシナリオを実際に適用したことはないため、DDDレベルでは完全に正確ではない可能性があります。しかし、これはInternalsVisibleTo
私が考えることができる使用法であり、単体テストに関連するものではありません。
テストとは別に、私がこれまでにこのInternalsVisibleTo
属性を使用した唯一の他のシナリオは、シリアル化アセンブリを作成するときでした。
それ以外は、使ったことがなく、必要もありませんでした。