InternalsVisibleToのフォローアップ。私はc# Instantiating Internal class with private constructorを見てきましたが、これは役に立ちましたが、返されたオブジェクトを内部型としてキャストしようとしています。
この問題を解決するためにリフレクションのルートを試していますが、リフレクションを使用してプライベート メソッドで内部型をインスタンス化する方法を見つけようとして苦労しています。型を取得してコンストラクターを取得し、オブジェクトを作成するところまで行くことができます。
キャストしたい型が内部型の場合、オブジェクトのキャストをどのように実行しますか?
public object InitPrivateCoreObjects(string Type)
{
Assembly Core = Assembly.Load("Stuff.Core, Version=0.3.3881.21340, Culture=neutral, PublicKeyToken=4fe470e63e2d354e");
Type TypeToReflect = Core.GetType("Stuff.Core.AssemblyWithIdentifer");
object o = Activator.CreateInstance(TypeToReflect);
MethodInfo mi = TypeToReflect.GetMethod("AssemblyWithIdentifer");
object newObject = mi.Invoke(o,null);
//alternatively
//ConstructorInfo ctor = TypeToReflect.GetConstructor(new Type[]{TypeToReflect.GetType()});
//ctor.Invoke(newObject, null);
return newObject;
}
内部クラスの型を取得し
、コンストラクターを呼び出してその型のオブジェクトをインスタンス化できます。ただし、内部型にアクセスできないため、そこからキャストして操作することはできません。
Reflection.Emit
そのタイプに基づいて新しいクラスを作成するために使用できることは理解していますが、その方法を使用する場合は、アクセスしようとしているプロジェクトの内容全体をテスト プロジェクトにコピーすることもできます。これは本当に無駄で無意味であり、他のプロジェクトからのものを投入して混乱を招く必要があり、現時点で私が行きたいルートではありません.
個々のメソッドとプロパティにアクセスする例を見たことがありますが、クラス全体をインスタンス化する例はありません。操作の順序では、アクセス修飾子が確認される前にリフレクションが発生するため、それが可能かどうかは 100% 確信が持てません。
これを行うことができますか?もしそうなら、どのように?
明確にするために、インスタンス化されたオブジェクトをテスト目的で使用したかったの[Assembly:InternalsVisibleTo("")]
ですが、現在回避しているバグのために機能していませんでした。元の質問については、こちらを参照してください。