首先,答案是不動態調用方法與正確的參數
.Invoke("name", new object[] { });
:)他這樣說,我有一個創建使用從定義上下文菜單和快捷鍵處理一些舊的通用代碼配置文件並使用.Invoke()方法執行實際方法,其中方法簽名是預定義的,否則該方法不執行
例如該方法簽名都是相同的這些論點
change_back_color(mycontext ctx, object sender, controlItemClickEventArgs e)
{
//...
}
我不得不返工的代碼,包括一些額外的功能,並希望有統一/ MEF一樣的功能,其中籤名只能包含必要的參數和參數順序可以改變
例如代碼可以改爲
[FunctionKey("myKey1")]
change_back_color(object sender, mycontext ctx)
{
//...
}
或
[FunctionKey("myKey1")]
change_back_color(mycontext ctx)
{
//...
}
尋找如何去了解它指導/在哪裏看
更新 - 這些定義中,可以像檢索數據庫所以
var commands = dbContext.GetCommands("current_view_name") ; // return method key, user roles etc.
// and i can use the following to match to "current_view_name"
[ImportMany(RequiredCreationPolicy=CreationPolicy.NonShared)]
public IEnumerable<Lazy<MenuItem,IDictionary<string,object>> MenuItems
{
set
{
var fooMenuItems = value
.Where(x => x.Metadata["ContextTarget"] == "current_view_name")
.Select(x => x.Value);
// attach fooMenuItems to some context menu...
}
}
但這些方法還需要一些自定義參數!有任何想法嗎 ?
爲什麼你確定答案不是'.Invoke(「name」,new object [] {sender,context});'? – 2012-03-14 02:44:35
@ M.Babcock - 問題是如何使用正確的參數調用.Invoke(),pref。使用MEF/Unity/AutoFac like方法調用生成器 – Kumar 2012-03-14 03:35:06