跟进InternalsVisibleTo。我已经查看了c# Instantiating Internal class with private constructor,这有所帮助,但我试图将返回的对象转换为内部类型,老实说,我不是 100% 这是可能的。
我正在尝试使用反射的方法来解决这个问题,但是我很难弄清楚如何使用反射来实例化具有私有方法的内部类型。我可以拉出类型并获取构造函数并创建一个对象。
如果我希望转换的类型是内部类型,我将如何执行对象的转换。?
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("")]
由于我目前正在解决的错误而无法正常工作。有关原始问题,请参见此处。