是否存在一个通配符类型的功能,使内部组件对共享公共程序集的主要部分(我的英语功能失败)名称的程序集可见?
例如,The.Empire是所有程序集的主要名称.我试过了The.Empire.*,但无济于事.
大会A.
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("The.Empire.*")]
namespace The.Empire
{
internal static class Constants
{
internal readonly static string CommonId = "Luke";
}
}
Run Code Online (Sandbox Code Playgroud)
大会B.
namespace The.Empire.Strikes
{
public class Mate
{
public void AccessSomething()
{
Console.WriteLine("{0}", Constants.CommonId); // inaccessible
}
}
}
Run Code Online (Sandbox Code Playgroud)
大会C.
namespace The.Empire.Back
{
public class Mate
{
public void AccessSomething()
{
Console.WriteLine("{0}", Constants.CommonId); // inaccessible
}
}
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?在OOP继承类比上,类似的东西protected,只有派生者才能访问受保护的
如果我将特定的程序集名称放在InternalsVisibleTo上,那么它不是松散的耦合.除非我重新编译AssemblyA,否则无法满足程序集A的其他实现程序
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("The.Empire.Strikes")]
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("The.Empire.Back")]
Run Code Online (Sandbox Code Playgroud)
dle*_*lev 12
文档建议指定多个程序集的唯一方法是使用多个属性或在单个属性中使用多个名称:
您可以通过两种方式定义多个朋友程序集.它们可以显示为单独的程序集级别属性... [或者它们]也可以使用单独的InternalsVisibleToAttribute标记显示,但只能显示单个程序集关键字.
那是:
[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
Run Code Online (Sandbox Code Playgroud)
要么:
[assembly:InternalsVisibleTo("Friend2a"),
InternalsVisibleTo("Friend2b")]
Run Code Online (Sandbox Code Playgroud)
我不认为你想要什么是可能的,而且可能是故意的.使你的内部对另一个组件可见是应该谨慎使用的东西,因为它允许更多的耦合,否则可能需要.因此,除非你绝对意味着将它们显示给给定的组件,否则很难显示你的内部结构.通配符积极地反对这一点.
您最好的选择(如果您不想使用多个属性)是:a)合并程序集,以便它们可以自然地共享internals或b)创建某些关键internal成员public(或protected)并使其成为另一个的集成点组件.