![](/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.