C#.NET : internal class accessible from another class using Type. GetType 和 Activator.CreateInstance?

标签 c# .net-assembly internal gettype

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

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

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


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

Figure

为了方便起见,我将对上面的类图进行一些解释:

  1. 大多数外部边界/矩形用于程序集/项目 即; A)sharemanagement.model, B) 共享管理,
    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 中定义。存储库)使用 Type.GetType(来自 EntityFactoryBuilder 类的 buildEntityFactory 方法内部)。

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

最佳答案

However, in my case another assembly is able to access internal class in another assembly using Type.GetType and is also able to create its object using Activator.CreateInstance() successfully.

确实,假设尝试这样做的代码具有适当的信任级别。事实上,完全可信的代码可以通过反射做各种事情,包括改变私有(private)字段。在信任度降低的环境中运行的代码无法执行这些操作。

关于C#.NET : internal class accessible from another class using Type. GetType 和 Activator.CreateInstance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19080247/

相关文章:

wcf - MSSQL 2012 为 WCF 创建 CLR 触发器失败

.net - 2 个项目是否可以引用同一程序集的 2 个不同版本,一个来自 GAC,另一个来自 aap\bin 文件夹?

安卓 : Play a video from a private application file

java - 当我从 Java 中的 ArrayList 中删除 1 个对象时。接下来会发生什么?

c# - 如果Both Checkboxes flag false怎么办?

c# - 从可用产品版本列表中找到最匹配的产品版本

.net - 在 .NET 中检索 DLL 信息

java - 有没有办法在 java 中使用 package-private 来允许其他包访问?

c# - MVC/n注入(inject) : Implementing My Own ApplicationUserManager

c# - C# 中类似 JavaScript 的匿名函数