たとえば、アセンブリAで次のコードを定義しています。
public abstract class Message
{
public int ID { get; internal set; }
public Message Parent { get; internal set; }
}
アセンブリBから、次のことを行う必要があります。
instanceOfMessage.ID = MethodToGetUniqueIDNumber();
instanceOfMessage.Parent = MethodToGetParent(); // Returns null /w no parent
現在、これを回避するためにInternalsVisibleToコンパイラオプションを使用しています。
[assembly:InternalsVisibleTo ("AssemblyB")]
// Namespace stuff here
public class Message
{
public int ID { get; internal set; }
}
これを機能させるためにコンパイラオプションをいじらなければならないのは、ちょっと厄介な感じがします。だから、私の質問は次のとおりです。
- この状況でInternalsVisibleToを使用しても大丈夫ですか?
- プロパティを公開して、誰も何も変更しないことを希望する必要がありますか?
- 私もこれを行う必要がありますか?
私の最終目標は、誰か、おそらく私のチームと私だけがメッセージを使用できるようにすることですが、IDなどのプロパティがそれらを管理するクラスの外部から変更されないようにすることです。ただし、メッセージなどのインスタンスを作成するのは私たちである必要があります。
私の最終目標は、私のチームと私が3番目のアセンブリであるアセンブリCでメッセージから継承できるようにすることです。アセンブリCはアセンブリAについてのみ知っています。アセンブリBは後で動的に読み込まれます。Cは、Aが提供するインターフェイスを使用してBにメッセージを送信します。