如何使引用的库中的单个类仅可在一个项目中显式实例化,或者不鼓励至少使用它?

时间:2018-07-16 13:35:38

标签: c# encapsulation

我在解决方案的许多项目中都实例化了Telerik数据访问上下文。 现在,在单独的项目MyContextProject中,我创建了一个类MyContext,该类将实例化并返回正确的Telerik上下文,并用MyContext替换Telerik上下文的所有实例。

我想防止任何人在MyContextProject之外显式实例化Telerik的数据访问上下文,但是我不想限制Telerik Data Access中任何其他类型的使用。

这是可以实现的吗?也许有一种方法可以创建注释,因为我不知道C#中的任何机制都可以支持该注释。


我试图使它成为一个通用的问题,Telerik可以用任何其他库替换。

1 个答案:

答案 0 :(得分:0)

  

我想防止任何人在MyContextProject之外明确实例化Telerik的数据访问上下文

不,这是不可能的-至少我不知道。由于Telerik数据访问上下文在该库/程序集中是公共的,因此引用该程序集的任何应用程序都可以实例化此类上下文类。

如果您可以修改库的源代码(即Telerik Data Access),情况将有所不同。在那种情况下,您可以将库上下文类的可见性设置为internal,然后向其添加InternalsVisibleTo attribute,以便您的程序集可以使用上下文类,而其他程序则不能。例如:

[assembly: InternalsVisibleTo("MyAssembly")]

这样,任何使用修改后的库的应用程序都无法实例化库的上下文类,而必须使用库中的MyContext类。但是,如果他们要使用库的上下文类,那仍然不能阻止任何人使用原始的,未修改的库。因此,实际上您无法强制执行此操作,答案仍然是:否。