![](/img/trans.png)
[英]C# fine-grained permissions: multiple internal systems, intranet scenario
[英]Fine-grained visibility for 'internal' members
最近我读到有关分区与.NET程序集的代码和偶然从一个很好的建议, 这个帖子 :“减少你的.NET程序集的数量进行严格的最低限度”。
我不能同意! 我个人经常看到的原因之一是,人们只想隔离一些代码,因此他们将类型/方法内部化并将它们放入一个单独的项目中。
将代码拆分为多个程序集还有许多其他原因(有效和无效),但是如果要将组件/ API隔离在一个库中,那么如何隔离组件/ API,那么如何做到这一点呢?
namespace MyAssembly.SomeApiInternals
{
//Methods from this class should not
//be used outside MyAssembly.SomeApiInternals
internal class Foo
{
internal void Boo() { }
}
}
namespace MyAssembly.AnotherPart
{
public class Program
{
public void Test()
{
var foo = MyAssembly.SomeApiInternals.Foo();
foo.Boo(); //Ok, not a compiler error but some red flag at least
}
}
}
如何限制类型/方法在同一个程序集中被其他类型/方法使用但在此命名空间之外?
(我将自己给出一些答案,看看人们会如何投票。)
谢谢!
您可以将代码放在不同的程序集中,然后在构建后的步骤中将程序集与ILMerge合并......
使用NDepend并输入体现您想要的CQL规则并将其作为构建的一部分运行。 该语言对此级别的限制不感兴趣。 (我还没有关注你的链接 - 你是否真的试图在没有NDepend的情况下做到这一点?你的答案应该在其中进行规则)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.