與MEF

2011-08-09 81 views
1

我想拿出類似什麼的Visual Studio 2010提供了菜單和上下文菜單的架構,這樣我可以延長我的當前菜單通過擴展提供額外的子項.NET應用程序擴展菜單和上下文菜單。我正在使用MEF(Managed Extensibility Framework)。 作爲一個例子,ReSharper的擴展添加菜單項和上下文菜單項,在任何可能的位置(頂部,中部或底部的上下文菜單或菜單項) 怎會去提供這樣的功能呢?我是否必須對shell的每個菜單項進行索引,並將擴展名引用索引以將其放置在子項上? 我希望我的問題很清楚。如果沒有,我會很樂意補充一些澄清。與MEF

回答

0

我不知道有這樣做一個最好的辦法。但是,這裏有一些想法來考慮:

一個相當簡單的解決方法是使用一個單一的合同(即IMenuIten),並使用元數據來控制哪些菜單命令出現在什麼位置。要做到這一點的方法之一是有一個「指數」,儘管它也許應該是一張雙人牀和用於在菜單中的項目,每個項目並不需要知道在菜單中的絕對位置排序。另一種方法是在菜單項上添加元數據,以提供當前項目之前和之後的其他項目列表。然後,您可以對菜單項進行拓撲排序以獲得顯示它們的訂單。

根據菜單行爲的複雜程度/動態需求,您可能會發現無法使用導出元數據。在這種情況下,您可能會將功能移至合同本身 - 即在您的IMenuItem合同中添加屬性或方法。這樣你可以運行代碼來計算你需要的值。

另一種解決方案是不出口的菜單項直接的。相反,您可以擁有由組件導入的菜單服務。該服務將有一個註冊方法,它將一個菜單項添加到菜單中。在我看來,這使得添加菜單項相當麻煩一些,所以我不會推薦它,除非有你需要它的原因。如果可用菜單項應基於應用程序的當前上下文而改變,則可能是合適的。請注意,如果你這樣做,只要有一個導入菜單服務的類不會導致類被創建和組合。該類需要導出系統中其他位置導入的內容。