我有具有以下构造Activator.CreateInstance找不到构造函数(MissingMethodException)
public DelayCompositeDesigner(DelayComposite CompositeObject)
{
InitializeComponent();
compositeObject = CompositeObject;
}
与没有参数的默认构造函数沿类。
下一个我试图创建一个实例,但它仅适用不带参数:
var designer = Activator.CreateInstance(designerAttribute.Designer);
这只是正常的,但如果我想通过参数它不:
var designer = Activator.CreateInstance(designerAttribute.Designer, new DelayComposite(4));
这导致MissingMethodException
:
构造VOOR类型 Vialis.LightLink.Controll er.Scenarios.Composites.DelayCompositeDesigner 找不到
这里的任何想法?
问题是我真的需要在施工期间传递一个对象。
你看我有一个设计器,加载所有从CompositeBase
继承的类型。然后将这些添加到列表中,用户可以将它们拖到设计器中。一旦这样做,拖动的实例就会添加到设计器中。每个类上定义了自定义属性:
[CompositeMetaData("Delay","Sets the delay between commands",1)]
[CompositeDesigner(typeof(DelayCompositeDesigner))]
public class DelayComposite : CompositeBase
{
}
当用户在设计者选择的项目,它着眼于这些属性以加载一个设计师该类型。例如,对于DelayComposite
,它将加载一个用户控件,该控件具有一个标签和一个滑块,以允许用户设置DelayComposite
实例的“延迟”属性。
到目前为止,如果我不将任何参数传递给构造函数,此工作正常。设计人员创建DelayCompositeDesigner
的实例并将其分配给WPF ContentPresenter
的内容属性。
但是由于该设计者需要修改设计者中所选择的DelayComposite
的属性,所以我必须将此实例传递给它。这就是为什么构造看起来在于这一点:
public DelayCompositeDesigner(DelayComposite CompositeObject)
{
InitializeComponent();
compositeObject = CompositeObject;
}
建议,欢迎
@VolkerK
代码的结果是这样的:
< --- - foo Vialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesignerVoid .ctor() Vialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesignerVoid .ctor(Vialis.LightLink.Controller.Scenarios.Composites.DelayComposite) param:Vialis.LightLink.Controller。Scenarios.Composites.DelayComposite FOO ---->
Leppie,你是正确的,我曾由于某种原因所引用的复合材料组件在我的UI应用程序......这是不是我应该有我在运行时加载它。下面的代码工作:
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)
所以应该接受我的代码,但我会尝试建议的代码
UPDATE:
我已经试过这样的建议:
var designer = Activator.CreateInstance(designerAttribute.Designer, new object[] { new DelayComposite(4)});
的结果是一样的。
蒂莫西 - 我已经修改了我的答案通过typeof运算(DelayCompositeDesigner)......或者也许我仍然缺少一块拼图。 – Kev 2008-10-16 15:01:31
您可以展开designerAttribute.Designer如何声明? – Kev 2008-10-16 15:18:54
Timothy - 是designerAttribute.Designer声明为Type? – Kev 2008-10-16 15:37:38