根据引用程序集限制哪些属性可用
Limit which attributes are available based on referencing assembly
我可能没有正确地表达这个问题,但希望我能理解我的意图。
我有一个包含三个项目的应用程序。项目 1 是应用程序的面向 Web 的部分。项目 2 是一个用于获取信息的 API。项目 3 是访问数据库以获取信息的部分,并且 return 将该信息发送给调用者。
从项目 1 开始,我调用项目 3 中对象中包含的方法,以访问/修改网站上使用的信息。因此,例如,在项目 1 中,我将调用 Project3.classes.myObject.getObject(2) 以根据对 objectID 2 的数据库查询获取 myObject 的实例。
myObject 有一大堆我在项目 1 中使用的属性。这些属性不一定都在网站上可见,许多在项目 1 内部使用。
现在,在项目 2 中,我希望能够通过 API 调用 return 此信息。因此,例如,使用 /controllers/myObject/2 调用 API 也会调用 Project3.classes.myObject.getObject(2)。但是当我从项目 2 调用时,我想限制 returned.
的属性
我知道我可以通过在项目 2 中包装 returned 对象并以这种方式限制从 API 调用中实际 returned 的内容来实现此目的。但是,有什么办法可以让我在项目 3 中完成这项工作吗?
我知道当我将属性声明为 "public" 时,它可用于任何调用它的程序集,而且我知道如果我将它声明为 "internal",它仅可用于包含部件。有没有我可以使用的修饰符,而不是 "any" 调用它的程序集,只有特定的程序集?
还是我完全错了?
你好像在谈论添加属性
[assembly:InternalsVisibleTo(Project1)]
到项目 3 AssemblyInfo.cs
接下来将所有应该对 Project1 可见但对 Project2 不可见的道具设置为 internal
。
话虽如此,我真的不认为这是一个好的设计,虽然我已经看到它在现实世界中的使用API。目的是在 API 的 DLL 之间共享一些功能,同时对第三方应用程序隐藏它。
我可能没有正确地表达这个问题,但希望我能理解我的意图。
我有一个包含三个项目的应用程序。项目 1 是应用程序的面向 Web 的部分。项目 2 是一个用于获取信息的 API。项目 3 是访问数据库以获取信息的部分,并且 return 将该信息发送给调用者。
从项目 1 开始,我调用项目 3 中对象中包含的方法,以访问/修改网站上使用的信息。因此,例如,在项目 1 中,我将调用 Project3.classes.myObject.getObject(2) 以根据对 objectID 2 的数据库查询获取 myObject 的实例。
myObject 有一大堆我在项目 1 中使用的属性。这些属性不一定都在网站上可见,许多在项目 1 内部使用。
现在,在项目 2 中,我希望能够通过 API 调用 return 此信息。因此,例如,使用 /controllers/myObject/2 调用 API 也会调用 Project3.classes.myObject.getObject(2)。但是当我从项目 2 调用时,我想限制 returned.
的属性我知道我可以通过在项目 2 中包装 returned 对象并以这种方式限制从 API 调用中实际 returned 的内容来实现此目的。但是,有什么办法可以让我在项目 3 中完成这项工作吗?
我知道当我将属性声明为 "public" 时,它可用于任何调用它的程序集,而且我知道如果我将它声明为 "internal",它仅可用于包含部件。有没有我可以使用的修饰符,而不是 "any" 调用它的程序集,只有特定的程序集?
还是我完全错了?
你好像在谈论添加属性
[assembly:InternalsVisibleTo(Project1)]
到项目 3 AssemblyInfo.cs
接下来将所有应该对 Project1 可见但对 Project2 不可见的道具设置为 internal
。
话虽如此,我真的不认为这是一个好的设计,虽然我已经看到它在现实世界中的使用API。目的是在 API 的 DLL 之间共享一些功能,同时对第三方应用程序隐藏它。