我有一个具有以下构造函数的类

public DelayCompositeDesigner(DelayComposite CompositeObject)
{
    InitializeComponent();

    compositeObject = CompositeObject;
}

以及没有参数的默认构造函数。

接下来,我尝试创建一个实例,但是它仅在没有参数的情况下有效:
var designer = Activator.CreateInstance(designerAttribute.Designer);

这工作得很好,但是如果我想传递参数,它就不会:
var designer = Activator.CreateInstance(designerAttribute.Designer, new DelayComposite(4));

结果为MissingMethodException:



这里有什么想法吗?

问题是我真的需要在构造过程中传递一个对象。

您看到我有一个设计器,该设计器加载了从CompositeBase继承的所有类型。然后将它们添加到列表中,用户可以从列表中将其拖到设计器中。这样做之后,将被拖动的实例添加到设计器中。这些类均在其上定义了自定义属性:
[CompositeMetaData("Delay","Sets the delay between commands",1)]
[CompositeDesigner(typeof(DelayCompositeDesigner))]
public class DelayComposite : CompositeBase
{
}

当用户在设计器中选择一个项目时,它会查看这些属性,以便为该类型加载设计器。例如,对于DelayComposite,它将加载带有标签和滑块的用户控件,该控件允许用户设置DelayComposite实例的“Delay”属性。

到目前为止,如果我不将任何参数传递给构造函数,这都可以正常工作。设计器创建DelayCompositeDesigner的实例,并将其分配给WPF ContentPresenter的content属性。

但是由于该设计者需要修改所选DelayComposite的属性
在设计器中,我必须将此实例传递给它。这就是为什么构造函数看起来像这样:
public DelayCompositeDesigner(DelayComposite CompositeObject)
{
    InitializeComponent();

    compositeObject = CompositeObject;
}

欢迎建议

@沃尔克

代码的结果是这样的:



Leppie,您是对的,出于某种原因,我在UI应用程序中引用了Composites程序集……这不是我应该在运行时加载时要做的事情。以下代码有效:
object composite = Activator.CreateInstance(item.CompositType,(byte)205);
                    var designer = Activator.CreateInstance(designerAttribute.Designer, composite);

如您所见,该代码不了解DelayComposite类型。

这解决了当前的问题,但是针对我想要实现的目标引入了许多新的问题,
无论哪种方式,谢谢您,也谢谢所有在这里回复的人。

至于以下代码,由多人建议:
var designer = Activator.CreateInstance(
    designerAttribute.Designer,
    new object[] { new DelayComposite(4) }
);
Activator.CreateInstance的签名如下所示:
Activator.CreateInstance(Type type, params object[] obj)

因此它应该接受我的代码,但是我会尝试建议的代码

更新:

我已经尝试按照建议这样做:
var designer = Activator.CreateInstance(designerAttribute.Designer, new object[] { new DelayComposite(4)});

结果是一样的。

最佳答案

我认为您正在处理类型不匹配。

可能在不同的地方引用了该程序集,或者针对不同的版本对其进行了编译。

我建议您遍历ConstructorInfo并在适当的参数上执行paramtype == typeof(DelayComposite)

关于c# - Activator.CreateInstance找不到构造函数(MissingMethodException),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/208777/

10-14 22:48
查看更多