跟进内部可见 https://stackoverflow.com/questions/3504257。我看过C# 使用私有构造函数实例化内部类 https://stackoverflow.com/questions/2023193/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("")]
由于我目前正在解决的错误而无法工作。看here https://stackoverflow.com/questions/3504257对于原始问题。