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,它具有一个带有单个参数的构造函数.
有谁知道问题是什么?
干杯,艾德
试试这个:
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[]显然不是你的类型.