【发布时间】:2010-09-17 13:12:51
【问题描述】:
我有一个具有以下构造函数的类
public DelayCompositeDesigner(DelayComposite CompositeObject)
{
InitializeComponent();
compositeObject = CompositeObject;
}
还有一个没有参数的默认构造函数。
接下来我正在尝试创建一个实例,但它只能在没有参数的情况下工作:
var designer = Activator.CreateInstance(designerAttribute.Designer);
这很好用,但如果我想传递参数,它不会:
var designer = Activator.CreateInstance(designerAttribute.Designer, new DelayComposite(4));
这会导致MissingMethodException:
构造函数类型 Vialis.LightLink.Controller.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
你的代码的结果是这样的:
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)});
结果是一样的。
【问题讨论】:
-
蒂莫西 - 我已经修改了我的答案以通过 typeof(DelayCompositeDesigner) ... 或者我仍然缺少一块拼图。
-
你能详细说明 DesignerAttribute.Designer 的声明方式吗?
-
Timothy - DesignerAttribute.Designer 被声明为 Type 吗?
-
我遇到了类似的问题,但事实证明没有找到我的构造函数,因为它不是
public(哎呀!)
标签: c# .net activator missingmethodexception