使用Constructor动态创建类,该类调用另一个Static类方法

时间:2012-05-29 14:02:15

标签: c# static

我正在尝试动态创建另一个程序集中的类CommandDrawing的实例。 CommandDrawing类默认构造函数包含对静态方法的调用,这些方法是同一汇编中的另一个类。动态类是创建的,但是当它试图在构造函数中运行静态方法调用时,它会被异常覆盖:

  

调用目标抛出了异常。   TypeInitializeException`类型初始值设定项引发异常。

我是否必须加载这两个类,如果是这样的话?

我使用下面的代码创建我以前成功使用过的类,并且当静态方法调用不存在时工作:

Assembly assemblyCommandDrawing = System.Reflection.Assembly.LoadFile(@"D:\ManifoldInspections.dll");
Type typeCommandDrawing = assemblyCommandDrawing.GetType("InspectionDetails.CommandDrawing");
object cmd = System.Activator.CreateInstance (typeCommandDrawing, new object[] { drawing, DrawingBaseDetail });

CommandDrawing默认构造函数如下所示 - 注意UtilityMapControl.SetupDrawingTableTemplate是我正在调用的静态方法,它落在这里:

public CommandDrawing(Manifold.Interop.Drawing p_Drawing, InspectionDetails.DrawingBaseDetail p_ClassDetailTemplate)
{
  this.Drawing = p_Drawing;
  //this.ClassDetailTemplate = p_ClassDetailTemplate.GetType();
  this.ClassDetailTemplate = p_ClassDetailTemplate;
  ManifoldInspections.Utility.UtilityMapControl.SetupDrawingTableTemplate(this.Drawing, p_ClassDetailTemplate);
}

1 个答案:

答案 0 :(得分:1)

可能无法加载依赖项。如果类型初始化程序使用可能发生的另一个程序集中的类型,因为LoadFile不能像您期望的那样解析依赖项。 MSDN says

  

LoadFile不会将文件加载到LoadFrom上下文中,也不会   使用加载路径解析依赖关系,如LoadFrom方法那样。

所以我建议使用LoadFrom代替LoadFile