首页 > 解决方案 > Activator.CreateInstance() 在创建实例时抛出 System.MissingMethodException C#

问题描述

我需要根据要求调用不同的类。为此,我使用了 Activator.CreateInstance() 来实现我的目标。但是,我可以在不传递参数的情况下成功访问特定类。但是,在通过论点时,我面临着问题。在这里,我发布了我的示例代码。

class Program
{
    private static readonly object[] activationAttributes;

    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");

        ObjectHandle obj = Activator.CreateInstance("JsonGenerator", "JsonGenerator.MyClass2", true, System.Reflection.BindingFlags.Default, null, new object[] { "TestValue" }, null, activationAttributes); // Not working
        //ObjectHandle obj = Activator.CreateInstance("JsonGenerator", "JsonGenerator.MyClass2"); // This kind of call work.
        ParentClass parent = (ParentClass)obj.Unwrap();

        parent.PerformFunction();
    }
}

public abstract class ParentClass
{
    public abstract void PerformFunction();
}
class MyClass1 : ParentClass
{
    public MyClass1(object[] args)
    {

    }

    public override void PerformFunction()
    {
        Console.WriteLine("Override insidet the class1");
    }
}

class MyClass2 : ParentClass
{
    public MyClass2(object[] args)
    {

    }

    public override void PerformFunction()
    {
        Console.WriteLine("Override insidet the class2");
    }
}

运行程序时抛出以下错误消息

Unhandled exception. System.MissingMethodException: Constructor on type 'JsonGenerator.MyClass2' not found.
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstanceInternal(String assemblyString, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)

如果有人可以提供帮助,将不胜感激。

谢谢,

标签: c#classactivatorcreateinstance

解决方案


要将字符串作为参数传递,解决了我的问题。事实上,CreateInstance 解压了对象并调用了相应的构造函数。

public MyClass1(string args)
{

}

和,

public MyClass2(string args)
{

}

谢谢,


推荐阅读