如何修复Activator.CreateInstance失败与MissingMethodException“未找到类型的构造函数”?

时间:2012-05-29 09:02:40

标签: c# wpf activator createinstance

我正在尝试使用以下内容创建自定义用户控件:

var panel = new GenericAccordionPanel<ZoneReport, ZonesPanel, ZonesVM>(myVm.ZonesVm);

GenericAccordionPanel定义为:

public class GenericAccordionPanel<THeader, TBody, TViewModel> : UserControl
{
    public Accordion Accordion { get; set; }

    public GenericAccordionPanel(TViewModel vmItem)
    {
        this.Accordion = new Accordion();

        //the constructor for ZoneReport(THeader) takes a ZonesVM (vmItem) as a parameter.
        var zr = (THeader)Activator.CreateInstance(typeof(THeader), new { vmItem });

        var exp = new Expander { Header = zr };

        Accordion.Children.Add(exp);

        base.Content = Accordion;
    }
}

问题是Activator.CreateInstance失败了以下MissingMethodException

  

找不到类型'[namespace] .Zones.ZoneReport'的构造函数。

如何创建ZoneReport

的isntance

1 个答案:

答案 0 :(得分:9)

new { vmItem }应为new object[]{ vmItem }

目前您以匿名类型作为第二个参数调用Activator.CreateInstance,而不是参数数组。

由于第二个参数(对于你想要的重载)实际上是params参数,你也可以只使用普通vmItem,编译器将生成数组:

 var zr = (THeader)Activator.CreateInstance(typeof(THeader), vmItem);