根据引用程序集限制可用的属性

时间:2017-12-21 19:01:50

标签: .net .net-assembly visibility api-design

我可能没有正确地表达这个问题,但希望我可以得到这个意图。

我有一个包含三个项目的应用程序。项目1是应用程序的面向Web的部分。项目2是用于访问信息的API。项目3是访问数据库以获取信息并将该信息返回给调用者的部分。

从Project 1,我调用Project 3中对象中包含的方法,以访问/修改在网站上使用的信息。因此,例如,从Project 1开始,我将调用Project3.classes.myObject.getObject(2)来获取基于objectID 2的数据库查询的myObject实例。

myObject包含我在Project 1中使用的一大堆属性。这些属性在网站上并不一定都是可见的,很多都在Project 1内部使用。

现在,从Project 2开始,我希望能够通过API调用返回此信息。因此,例如,使用/ controllers / myObject / 2调用API也会调用Project3.classes.myObject.getObject(2)。但是当我从Project 2调用时,我想限制返回的属性。

我知道我可以通过在项目2中包装返回的对象来实现这一点,并以这种方式限制从API调用实际返回的内容。但是,有什么方法可以让我在项目3中完成这项工作吗?

我知道当我将一个属性声明为“public”时,它可以被任何调用它的程序集使用,而且我知道如果我将它设置为“internal”,它只能用于包含程序集。是否有任何我可以使用的修饰符,而不是“任何”调用它的程序集,只有特定的程序集?

或者我是否完全以错误的方式思考这个问题?

1 个答案:

答案 0 :(得分:0)

好像在谈论添加属性

[assembly:InternalsVisibleTo(Project1)]

到Project3 AssemblyInfo.cs

接下来将所有应该对Project1可见的道具设置为internal而不是Project2。

话虽如此,我真的不认为它是一个好的设计,虽然我已经看到在现实世界的API中使用。目的是在API的DLL之间共享一些功能,同时将其隐藏在第三方应用程序之外。

https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute(v=vs.110).aspx