我会尽量保持这种一般性,因为我试图理解模式而不是解决特定问题。
假设我有一个Web应用程序(A),并且我想通过受限制的接口使其逻辑和/或结构的一部分可用。例如,我可能希望允许用户注册帐户,但只能通过AccountManager.RegisterAccount
方法而不是new Account
(不应允许用户调用)。此类用户应该能够注册帐户,但不一定能通过Web应用程序注册。
为实现这一目标,我创建了一个包含所有基本结构和业务逻辑的类库(B),在Web应用程序项目中留下与Web本身相关的内容。
但是,我无法看到如何在不泄露应该对该类用户隐藏的部分的情况下释放库B. internal
访问修饰符不是我的工具,因为它也会限制应用A中的这些部分。相反,我需要这些部分是" public"对于A(这是一个"特权用户" B),但是"非公开"对于B.的用户。
我怎样才能做到这一点?
答案 0 :(得分:2)
听起来internal
正是您所需要的。将AccountManager
公开,Account
内部将阻止客户与Account
类进行交互。您可以使用InternalsVisibleTo
将Account
类公开给A,但不能公开给第三方程序。
在您的图书馆中,您可以进行以下操作:
[assembly: InternalsVisibleTo("A")]
这种方法有一些明显的缺点。图书馆无法有效地获得任何内部实施细节,因为A能够公开访问它们。