Как исправить ошибку Activator.CreateInstance с MissingMethodException "Конструктор для типа не найден"?
Я пытаюсь создать пользовательский элемент управления со следующим:
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
?
1 ответ
Решение
new { vmItem }
должно быть new object[]{ vmItem }
,
На данный момент вы звоните Activator.CreateInstance
с анонимным типом в качестве второго аргумента, а не массивом параметров.
Поскольку второй аргумент (для требуемой перегрузки) на самом деле params
параметр, вы также можете просто использовать обычный vmItem
и компилятор сгенерирует массив:
var zr = (THeader)Activator.CreateInstance(typeof(THeader), vmItem);