Activator.CreateInstance

时间:2018-10-19 08:41:13

标签: c# .net activator missingmethodexception

我有一个带有此构造函数的Form类:

public partial class PackageForm : Form
{
    Responder MfwuResp;

    public PackageForm()
    {
        MfwuResp = new Responder(new Responder.CancelHandler(StopMethod), true);
    }

    public void StopMethod(Responder responder)
    {
        Console.WriteLine("Cancel Update");
    }
}

我在单独的文件中也有一个Responder类

public class Responder 
{
    Type[] types;
    Object resp;

    public Responder(Responder.CancelHandler handler, bool isCancellable)
    {
        BinaryReader reader = new BinaryReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("Update.Resources.AppUpdate.dll"));

        byte[] bytes = reader.ReadBytes((int)reader.BaseStream.Length);

        Assembly assm = Assembly.Load(bytes);

        types = assm.GetExportedTypes();

        resp = Activator.CreateInstance(types[0], new object[] { handler, isCancellable });

    }

    public delegate void CancelHandler(UtilityResponder responder);
}

每当我在Main中创建一个新的PackageForm时, 我得到一个MissingMethodException

  

找不到类型为'AppUpdate.Responder'的构造函数。

知道为什么会这样吗?我想语法上没有问题,因为存在CreateInstance的构造函数,该构造函数将Type和params object []作为参数。

注意:Responder类是从外部dll文件AppUpdate.dll引用的。

1 个答案:

答案 0 :(得分:0)

首先,您是否完全确定types仅包含PackageForm

无论如何,当它仅具有默认构造函数(无参数)时,您尝试使用构造函数参数创建PackageForm

您可能只想打电话给这个人

resp = (Form)Activator.CreateInstance(types[0]);