• Showing Page History #105997

Show page source of manual_CreateContribution #105995

== 新しいコントリビューションの追加 ==

1. コントリビューションクラスの追加

{{{ code csharp
namespace nft.contributions.ui
{
	/// <summary>
	/// CtbMenuItem の概要の説明です。
	/// </summary>
	public class CtbMenuItem : Contribution
	{
		/// <summary>
		/// Contributes a menu and submenu items to mainmenu.
		/// 
		/// This contribution can add several items at once.
		/// </summary>
        public CtbMenuItem(Plugin p, ParamsReader e)
            : base(p, e) 
		{
                        // 実装を定義
		}
	}
}
}}}


2. コントリビューションタイプの宣言
plugin.xmlに以下のような記述を追加する
{{{ code xml
<declare-contribution type="MenuItem">
    <name>Menu items</name>
    <class name="nft.contributions.ui.CtbMenuItem"/>
    <!--<factory-class name="nft.framework.plugin.DefaultContributionFactory"/> 省略化-->
 </declare-contribution>
}}}

3. コントリビューションの追加
plugin.xmlに以下のような記述を追加する。
任意の数だけ記述することが出来る。2 とは別のplugin.xmlに書くこともできる。
{{{ code xml
<contribution type="MenuItem" id="hogehoge">
    <name>Sample Menu Item</name>
    <description>サンプルのメニュー項目</description>
    <!--その他固有のパラメータ-->
 </contribution>
}}}

4. NeoFT起動
起動時にCtbMenuItemのコンストラクタが呼ばれるようになる。
引数 ParamsReader には 3 に記述したノードの内容が含まれる。

== 特殊例 ==
=== 匿名コントリビューション
[wiki CtbAnonymous] クラスを継承して作る
{{{
  <contribution type="Anonymous" id="Test_CtbAnonymous">
    <name>匿名コントリビューション</name>
    <description>ファクトリ宣言を必要としない、孤立したコントリビューションのサンプル(CtbAnonymousを継承すべし)</description>
    <class name="nft.debug.TestAnonymousCtb" codebase=".Core"/>
  </contribution>
}}}
実際には type=Anonymous の宣言がメインのplugin.xmlに書いてある
シングルトンのような孤立したコントリビューションを気軽に追加できるように作ったが、
そういう物は基本コードで成り立つので、[wiki BinaryModule] として定義する方がよい。
(各プラグインの初期化順に影響するため)