Visual Studio 2010の機能と同様のメニューとコンテキストメニューのアーキテクチャを使用して、現在のメニューを拡張機能によって提供されるサブアイテムとともに拡張できます。私はMEF(Managed Extensibility Framework)を使用しています。 例として、Resharper拡張機能は、メニュー項目とコンテキストメニュー項目を任意の位置(コンテキストメニューの上部、中央または下部、またはメニュー項目)に追加します このような機能を提供するにはどうすればよいですか?シェルのすべての単一メニュー項目にインデックスを付ける必要がありますし、そのサブ項目を配置するためにインデックスを参照する拡張機能を持っていなければなりませんか? 私の質問が十分に明確であることを願っています。もしそうでなければ、私はいくつかの説明を追加して満足しています。MEFを使用した.NETアプリケーションでのメニューとコンテキストメニューの拡張
答えて
私はこれを行うための最善の方法はないと思います。
非常に単純な解決策は、単一の契約(すなわちIMenuIten)を使用し、メタデータを使用してコマンドがどのメニューに表示され、どの位置に表示されるのかを制御することです。これを行うための1つの方法は、おそらく二重であり、各項目がメニュー内の絶対位置を知る必要がないようにメニュー内の項目をソートするために使用されるべきであるが、「索引」を有することである。別の方法は、現在のアイテムの前後にあるべき他のアイテムのリストを与えるメニューアイテムにメタデータを持たせることです。次に、メニューアイテムをトポロジカルソートして表示するように指示することができます。
メニューの動作を複雑にするか動的にするかによって、書き出しを使用してうまく表現できないことがありますメタデータ。この場合、機能を契約自体に移すことができます。つまり、IMenuItemコントラクトのプロパティやメソッドを追加することができます。そうすれば、コードを実行して必要な値を計算することができます。
もう1つの解決策は、メニュー項目を直接エクスポートすることではありません。代わりに、コンポーネントによってインポートされるメニューサービスを持つことができます。サービスには、メニュー項目をメニューに追加するRegisterメソッドがあります。私の意見では、これはメニュー項目をかなり煩雑にしてしまうので、必要がある場合を除いてはお勧めしません。使用可能なメニュー項目がアプリケーションの現在のコンテキストに基づいて変更される必要がある場合は、適切かもしれません。このようにすると、メニューサービスをインポートするクラスを持つだけで、クラスが作成されて作成されることはありません。クラスは、システム内の他の場所にインポートされたものをエクスポートする必要があります。
- 1. html5とcss3を使用したメニューの拡張
- 2. Safari拡張のコンテキストメニュー
- 3. Windowsのコンテキストメニューを拡張モバイル
- 4. iframe用のChrome拡張メニュー
- 5. Microsoft拡張フレームワーク - MEF CompositionContainer
- 6. .NET Sosex拡張のレジスタを使用
- 7. Redmine - コンテキストメニューを拡張する
- 8. MySqlを使用したAsp NETメンバーシップ。 My_aspnet_applicationsテーブルの拡張
- 9. 埋め込みスクリプトを使用したC++アプリケーションの拡張
- 10. Operaのコンテキストメニュー拡張内の関数(イベント)
- 11. XML(メニュー)リソースの継承と拡張
- 12. .NETベースのアプリケーションの高性能と拡張性
- 13. jQueryを使用したリンクの拡張
- 14. .NET 2.0の拡張メソッドを使用しますか?
- 15. .NET 2.0または3.0で拡張メソッドとLINQを使用できますか?
- 16. Entity Frameworkの:動的に私はMEFを使ってプラグインを介した拡張されるアプリケーション、に取り組んでいますMEF
- 17. 私のWebアプリケーションでninject.web拡張子を使用して、Webフォームアプリケーション
- 18. 拡張メソッドでの.netコアの依存関係の使用
- 19. 拡張アプリケーションを使用する理由
- 20. jQueryメニューを拡張する
- 21. Qtを使用した拡張可能アプリケーション
- 22. ドキュメント内のどこでVisual Studio拡張コンテキストメニューをクリックしたのかを確認
- 23. Estimator APIとTFRecordsデータセットを使用したTensorflowでのデータ拡張
- 24. 拡張メソッドを.Netで使用するためのベストプラクティスは何ですか?
- 25. ImportManyとExportMetadataを使用したMEF
- 26. Ajax拡張で.net 2.0でページメソッドを使用できるか?
- 27. Safari拡張 - 動的拡張メニューの画像
- 28. C#インターフェイスを使用して既存のアプリケーションを拡張する
- 29. VSCode拡張API - エクスプローラのコンテキストメニューでファイルまたはフォルダをクリックします。
- 30. visjsのノード(コンテキストメニュー)の右クリックで拡張ポップアップ(htmlリスト)を開く