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

问题描述 投票:0回答:1

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

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

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

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

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

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

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

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

.net .net-assembly visibility api-design
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.