Activator.CreateInstance(t,42,args)找不到构造函数

Ed *_*mes 2 .net c# types createinstance activator

我在工厂模式样式函数中使用(稍微扩展版本)以下代码:

public class SingleItemNew : CheckoutContext { public BookingContext Data { get; set; } public SingleItemNew(BookingContext data) { Data = data; } } public CheckoutContext findContext(BookingContext data) { Type contextType = Type.GetType("CheckoutProcesses." + data.Case.ToString()); CheckoutContext output = Activator.CreateInstance(contextType, BindingFlags.CreateInstance, new[] { data }) as CheckoutContext; return output; }

但是,它会在运行时抛出一个未发现异常的构造函数,我无法弄清楚原因.

data.Case.ToString()方法返回一个类的名称SingleItemNew,它具有一个带有单个参数的构造函数.

有谁知道问题是什么?

干杯,艾德

Meh*_*ari 7

试试这个:

  Type contextType = Type.GetType("CheckoutProcesses." + data.Case.ToString());
  CheckoutContext output = 
      (CheckoutContext)Activator.CreateInstance(contextType, data);
Run Code Online (Sandbox Code Playgroud)

你编码不起作用的原因是你Activator.CreateInstance真的没有你想要的重载.所以你可能想知道为什么代码会编译!原因是,它有一个重载,(Type type, params object[] args)它匹配你的方法调用,所以它编译,但在运行时,它搜索你的类型的构造函数采取a BindingFlags和a BookingContext[]显然不是你的类型.