1

我知道在一个类上声明的访问修饰符 internal 可以从同一个程序集中访问它。

但是,在我的情况下,另一个程序集能够使用 Type.GetType 访问另一个程序集中的内部类,并且还能够使用 Activator.CreateInstance() 成功创建其对象。

我想知道是否真的可以在另一个程序集中使用 Type.GetType() 访问另一个程序集中的内部类?如果没有,那么我错过了什么吗?


附加细节:我将指定一个链接,其中包含我的领域驱动设计(模型和基础设施层)的类图,它使用三个组件/项目:

数字

为了方便起见,我将解释有关上述类图的一些信息:

  1. 大多数外部边界/矩形用于组件/项目,即;A)sharemanagement.model,B)sharemanagement,
    C)sharemanagement.infrastructure.repositories

这样 sharemanagement 就像由 sharemanagement.model 和 sharemanagement.infrastructure.repositories 引用的核心(或库),但 sharemanagent 程序集不引用这两者中的任何一个(因为 sharemanagement 是其他程序集所依赖的核心/基础库/程序集。

  1. 矩形内的矩形是子目录。

现在,sharemanagement.model 请求 sharemanagement(使用它的 repositoryFactory)返回一个 CompanyRepository 的实例(在 Sharemanagement.Infrastructure.Repositories 中定义),sharemanagement 使用 Type.GetType 和 Activator.CreateInstance()

并且,在创建 CompanyRepository 实例的实例时(如上所述使用 Activator.CreateInstance()),CompanyRepository 的基类,即“SQLRepositoryBase”(在 Sharemanagement 中定义)获取 EntityFactory 的实例(在 Sharemanagement.Infrastructure.Repositories 中定义)使用Type.GetType(来自内部的 buildEntityFactory 方法)EntityFactoryBuilder 类。

需要注意的主要一点是,CompanyFactory 是内部类并在程序集“sharemanegement.infrastructure.repositories”中定义,而 EntityFactoryBuilder.buildentityFactory() 类在程序集“sharemanagement”中定义。

4

2 回答 2

4

但是,在我的情况下,另一个程序集能够使用 Type.GetType 访问另一个程序集中的内部类,并且还能够使用 Activator.CreateInstance() 成功创建其对象。

实际上,假设尝试这样做的代码具有适当的信任级别。事实上,完全受信任的代码可以通过反射做各种事情,包括更改私有字段。在信任度降低的环境中运行的代码不能做这些事情。

于 2013-09-29T16:18:53.363 回答
1

在混淆的程序集中可能无法访问内部实体。

于 2013-09-29T16:56:48.583 回答