2

我在 .NET 中创建了一个组件,旨在用于其他公司或开发团队的多个 .NET 解决方案。

我的组件由多个 DLL 组成。大致来说,它有:

  • 可以进行大量操作的核心DLL,以及
  • 一个外观DLL,它只提供这些操作的一小部分,以便可以为不同的客户或集成定制该组件。

问题是我不希望任何人能够访问核心方法,而只希望能够访问外观方法。这样,我将确保没有人试图通过直接调用核心方法而不是外观方法来作弊。

有可能实现吗?为了实现这种封装,是否有任何模式或良好实践?

4

2 回答 2

3

制作核心类型的访问修饰符internal并利用在您自己的程序集中InternalsVisibleToAttribute共享实现。internal此属性将允许您的外观DLL 访问核心内部。

然而,这不会阻止有决心的人使用反射。它的作用是让访问变得不简单,这通常足以将大多数人引导到公开暴露的类型。

此外,在发布程序集时缺乏关于内部内容的文档会劝阻人们 - 再加上公共类型的非常好的文档。

谨慎的做法是始终查看人们如何尝试使用您的程序集。核心中可能存在人们非常喜欢的类型,因为它们很有用或有你没有考虑过的用途——准备通过外观暴露这些类型以满足消费者的需求。

于 2012-05-30T08:41:07.353 回答
1

您可以将所有核心公共方法/成员/等更改为内部,然后使用InternalsVisibleToAttribute使所有内部项目对外观可见。

另一种方法是使用StrongNameIdentityPermissionAttribute,它将:

保证调用者(直接调用者或调用链中某处的调用者)已使用特定的强名称进行签名。 (这不再按预期工作)

于 2012-05-30T08:42:04.190 回答