我有具有以下構造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