是否可以封装多个.net组件以提供单个公共接口?

时间:2012-05-30 08:38:32

标签: .net encapsulation .net-assembly facade

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

我的组件由多个DLL组成。粗略地说,它有:

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

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

有可能实现这一目标吗?是否有任何模式或良好实践来实现这种封装?

2 个答案:

答案 0 :(得分:3)

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

然而,这不会阻止被确定的人使用反射。它的作用使得获取访问变得非常重要,这通常足以将大多数人引导到公开暴露的类型。

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

始终关注人们如何使用您的程序集是明智的。 核心中可能存在人们偏重的类型,因为它们很有用或者您没有考虑过使用 - 准备通过 facade 公开这些类型以满足消费者的需求。

答案 1 :(得分:1)

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

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

  

保证呼叫者(直接呼叫者或某个地方)   已经签署了一个特别强大的名字。   (这不再按预期工作)