c# - 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)
如果有人可以提供帮助,将不胜感激。
谢谢,
解决方案
要将字符串作为参数传递,解决了我的问题。事实上,CreateInstance 解压了对象并调用了相应的构造函数。
public MyClass1(string args)
{
}
和,
public MyClass2(string args)
{
}
谢谢,
推荐阅读
- django - 如何修复 django 中的 sql 查询
- r - R按数值升序然后按字符串顺序排序
- linux - GNU find -exec 命令 {} ; vs -exec 命令 {} +
- ruby-on-rails - 如何在 Rails 中将输出存根到 CSV 文件而不替换/重写其中的操作?
- reporting-services - 如何创建具有不同详细信息的数据组?
- java - 具有参数化列表类型参数的 Java 方法
- javascript - 使用形式(antd)的onfinish推送到相同的路径(防止推送?)
- c++ - 用用户的输入填充向量
- lua - 获取航点位置
- excel - 跨excel文件显示交集值