我知道在一个类上声明的访问修饰符 internal 可以从同一个程序集中访问它。
但是,在我的情况下,另一个程序集能够使用 Type.GetType 访问另一个程序集中的内部类,并且还能够使用 Activator.CreateInstance() 成功创建其对象。
我想知道是否真的可以在另一个程序集中使用 Type.GetType() 访问另一个程序集中的内部类?如果没有,那么我错过了什么吗?
附加细节:我将指定一个链接,其中包含我的领域驱动设计(模型和基础设施层)的类图,它使用三个组件/项目:
为了方便起见,我将解释有关上述类图的一些信息:
- 大多数外部边界/矩形用于组件/项目,即;A)sharemanagement.model,B)sharemanagement,
C)sharemanagement.infrastructure.repositories
这样 sharemanagement 就像由 sharemanagement.model 和 sharemanagement.infrastructure.repositories 引用的核心(或库),但 sharemanagent 程序集不引用这两者中的任何一个(因为 sharemanagement 是其他程序集所依赖的核心/基础库/程序集。
- 矩形内的矩形是子目录。
现在,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”中定义。