我有一个具有以下构造函数的类
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/