フォームのツリービューでノードタイプとコンテキストアクションの拡張性への最善のアプローチ
-
06-09-2019 - |
質問
私は、アドインサーバー製品のコンテンツのビューを提供してツリービューを表示するのVisual Studio 2008用のVisual Studioに取り組んでいます。サーバー製品は、異なるタイプのノードが含まれ、各ノードには、コンテキストメニュー(右クリックメニュー)の独自の型を持つ。
私は現在、単にコード2私のプロジェクトを追加したノードに接続されている新しいノードの種類とアクションのために。私は、プラグインモデルでコンテキストメニューへのノードおよびエントリを追加することができるように、いくつかの私のノードタイプとノード上で使用可能なアクションを切断したいと思います。 MEFは、おそらく良い候補だろう。特にプラグインの開発者は配管の多くを行う必要がないように、誰もが、シンプルかつ簡単な方法でこれを実装する方法の良いアイデアを持っていますか?
解決
私はあなたのコードとプラグインライブラリへのすべてのリンクの両方が(この契約の依存呼び出す)共通ライブラリを提供します。そこでは、INodeTypeように、ノードタイプのインタフェースを規定します。また、INodeTypeを実装し、プラグインの作者が自分のコンストラクタで設定することができますいくつかの有用な性質を提供してそこにAbstractNodeTypeの実装を検討します。
INodeTypeの特性の1つは、Windowsフォームのコンテキストメニューを返すContextMenuプロパティです。
あなたのコードでは、プロパティを作成します:
[Import("NodeTypes", typeof(INodeType))]
public IEnumerable<INodeType> extensionNodeTypes { get; set; }
あなたはちょうどあなたが構成した後、そのを通じて列挙することができます。
プラグインのコードでは、彼らはこのような新しいノードタイプのものを(コンパイルされない場合があります)宣言します
[Export("NodeTypes", typeof(INodeType))]
public class SomeNodeType : AbstractNodeType
{
public SomeNodeType()
{
this.ContextMenu = base.BuildContextMenu(/* ... */);
/* etc. */
}
/* ... other custom logic ... */
}
私は私が台無し構文はなかった願っていますが、それは一般的な考えです。