我在.NET中创建了一个组件,用于其他公司或开发团队的多个.NET解决方案。
我的组件由多个DLL组成。粗略地说,它有:
问题是我不希望任何人能够访问核心方法,只能访问 facade 方法。这样我就可以通过直接调用核心方法而不是 facade 方法来确保没有人试图作弊。
有可能实现这一目标吗?是否有任何模式或良好实践来实现这种封装?
答案 0 :(得分:3)
制作核心类型internal
的访问修饰符,并利用InternalsVisibleToAttribute
在您自己的程序集中共享internal
实现。此属性允许您的 facade DLL访问核心内部。
然而,这不会阻止被确定的人使用反射。它的作用使得获取访问变得非常重要,这通常足以将大多数人引导到公开暴露的类型。
此外,在发布程序集时缺乏内部资料的文档会劝阻人们 - 加上公共类型的非常好的文档。
始终关注人们如何使用您的程序集是明智的。 核心中可能存在人们偏重的类型,因为它们很有用或者您没有考虑过使用 - 准备通过 facade 公开这些类型以满足消费者的需求。
答案 1 :(得分:1)
您可以将所有核心公共方法/成员/等更改为内部,然后使用InternalsVisibleToAttribute使所有内部项目对façade可见。
另一种方法是使用StrongNameIdentityPermissionAttribute,它将:
保证呼叫者(直接呼叫者或某个地方) 已经签署了一个特别强大的名字。(这不再按预期工作)