在以下场景中(原谅我的伪代码):
Assembly Lib:
Interface A;
Class 123; //Utilizes multiple properties with a { get; internal set; } pattern.
//Contains more class definitions like Class 123
Assembly Impl: //References Lib
Class MyImpl; //Implements Interface A and utilizes Class 123.
ClientApplication:
//Consumes Interface A
我想知道是否有一种方法允许Class MyImpl访问类123的属性set(),而不使用静态声明的朋友程序集并保持那些set()也对ClientApplication隐藏。
最终目标是能够以允许ClientApplication利用AssemblyLib中的类型的方式部署它,并且能够删除新的实现程序集而无需重新编译和重新分发Assembly Lib。
我正在考虑找到一种方法来使内部修饰符在其实例化(Assembly Impl)而不是在其声明(Assembly Lib)中生效,但我不相信C#支持这样的任何东西。
我意识到如果可以做到这可能真的很难看,而且我不确定自己能不能这样做,但唉,这就是我在这里的原因!感谢您的帮助。
答案 0 :(得分:2)
使用你的例子,这里是我所了解的想法。为什么不将设计更改为:
Assembly Lib:
Interface A;
Interface B; //Utilizes multiple properties with a { get; } pattern.
//Contains more interface definitions like Interface B
Assembly Impl: //References Lib
Class 123; //Utilizes multiple properties with a { get; internal set; }
//pattern. Implements B.
//Contains more class definitions like Class 123
Class MyImpl; //Implements Interface A and utilizes Class 123.
ClientApplication:
//Consumes implementations of Interface A and B provided by Impl.
答案 1 :(得分:0)
您可能需要查看InternalsVisibleToAttribute
。
例如,在Lib
程序集中,将此行添加到assemblyinfo.cs
文件中:
[assembly:InternalsVisibleTo("Impl")]