1

クラスで宣言されたアクセス修飾子 internal により、同じアセンブリ内からアクセスできるようになることを私は知っています。

ただし、私の場合、別のアセンブリは Type.GetType を使用して別のアセンブリの内部クラスにアクセスでき、Activator.CreateInstance() を使用してそのオブジェクトを正常に作成することもできます。

別のアセンブリで Type.GetType() を使用して、別のアセンブリの内部クラスにアクセスできることは本当に可能ですか? そうでない場合、何か不足していますか?


追加の詳細: 3 つのアセンブリ/プロジェクトを使用するドメイン駆動設計 (モデルおよびインフラストラクチャ レイヤー) のクラス図を含むリンクを指定します。

形

簡単にするために、上記のクラス図について少し説明します。

  1. ほとんどの外部境界/長方形は、アセンブリ/プロジェクト用です。A) sharemanagement.model、B) sharemanagement、
    C) sharemanagement.infrastructure.repositories

sharemanagement は、sharemanagement.model および sharemanagement.infrastructure.repositories によって参照されるコア (またはライブラリ) に似ていますが、sharemanagement アセンブリはこれら 2 つのいずれも参照しません (sharemanagement は、他のアセンブリが依存するコア/ベース ライブラリ/アセンブリであるためです。

  1. 長方形内の長方形はサブディレクトリです。

ここで、sharemanagement.model は sharemanagement に (repositoryFactory を使用して) CompanyRepository (Sharemanagement.Infrastructure.Repositories で定義) のインスタンスを返すように要求します。

また、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 に答える