.NET应用程序 - 如何隐藏依赖库的实现?

时间:2018-02-08 13:00:58

标签: c# .net architecture class-library

这可能是this问题的重复,但我不想使用建议的解决方案,即使用网络服务。

以下是该方案:

1)我想向客户端公开一个类库。我们将其命名为" MyClassLibrary"。

2)还有两个图书馆"图书馆1"和"图书馆2"在" MyClassLibrary"的相同解决方案中项目

3)" Libray1"在"图书馆2"和"图书馆2"在" MyClassLibrary"中引用。

4)没有直接引用" Libray1"在" MyClassLibrary"。

我想要什么?

" MyClassLibrary"的客户不应该能够访问" Library1"中的类,方法。它有可能吗?如果我为" MyClassLibrary"创建nuget包,它将包含" Library1" (以及"图书馆2")。因此,使用该DLL,客户端可以轻松访问" Library1" (以及" Library2")。我怎么能避免这种情况?我希望我的客户能够只访问" MyClassLibrary"并且没有实施" Library1" (也许"图书馆2")。怎么做到这一点?

2 个答案:

答案 0 :(得分:5)

如果您希望客户端访问代码不太方便,可以使用访问说明符来阻止他这样做。例如,您可以使用InternalsVisibleTo属性来隐藏您的实现,或者将它们全部放在一个程序集中,并使大部分内容都是私有的。

然而,这只是为了防止他意外使用它。

如果它包含您不希望他知道的秘密,则不得将其传递给他。一种选择是仅提供Web服务的接口,并在您的位置运行包含您的秘密的实际服务。如果你给他组装,没有任何保护,混淆或其他模糊,你的秘密是公开的。

答案 1 :(得分:0)

不。让事情internal解决你刚才描述的问题。同样,请注意[assembly:InternalsVisibleTo(...)]

的存在

当然,正确应用反射甚至可以访问私人物品。但我不考虑这种情况。