新規インターフェースの追加

新規タイプのオブジェクトは、org.eclipse.core.component.types 拡張ポイントにそれを登録することにより、パーツのコンストラクターに受け渡すことができます。 この時点で、コンポーネント という用語を紹介する必要があります。 コンポーネントとは、引数をそのコンストラクターに導入することにより拡張ポイントから作成された、あらゆる種類のオブジェクトです。 新規スタイルのパーツは、コンポーネントの一種ですが、他のタイプのコンポーネントもあります。

以下の例には、サンプルのタイプの拡張が示されています。 この例では、INameable インターフェースが、あるパーツのサイトで使用可能であるように指定しています。

<extension
      point="org.eclipse.core.component.types">
   <component
         initializer="org.eclipse.ui.part.SiteInitializer"
         interface="org.eclipse.ui.part.services.INameable"
         implementation="org.eclipse.ui.internal.part.services.NullNameableService"
         singleton="true"
   />
</extension>

initializer 属性は、インターフェースが使用される場所を指示しています。 例えば、ストリング "org.eclipse.ui.part.SiteInitializer" は、インターフェースがパーツのサイトで使用されることを意味します。 パーツ自体をインプリメントするようにインターフェースで意図していた場合は、"org.eclipse.ui.part.PartInitializer" も使用できます。

interface 属性は、インターフェースの名前です。 これは、コンポーネントがそのコンストラクター内で受信するタイプに完全に一致する必要があります。 ストリングを提供する拡張を作成する場合にコンポーネントがオブジェクトを要求する場合、互換タイプであってもその拡張は使用されません。

implementation 属性は、インターフェースのデフォルトの実装を示しています。 これは、インターフェースを実装するコンポーネント・クラス、またはそれを作成できる ComponentFactory のいずれかを指し示します。 詳しくは、ComponentFactory のセクションを参照してください。 この実装は、コンポーネントがこのインターフェースを要求し、その親コンテキストで検出できない場合にいつも、依存関係を満たすために使用されます。 すべてのインターフェースは、デフォルトの実装を提供する必要があります。 これは、正しく作成されたコンポーネントが、その親コンテキストにより提供される依存関係の数に関係なく、特定のスコープで動作することを意味します。 その実装は、追加のインターフェースを実装することによって、インターフェース属性をオーバーライドまたは拡張することはできません。 その他のコンポーネントは、その登録済みインターフェースを経由してこのコンポーネントに依存できますが、実装クラスには直接依存できません。

singleton 属性は、デフォルトの実装が singleton であるかどうかを示します。 true である場合は、単一インスタンスが作成され、それを必要とするその他のすべてのコンポーネントで共用されます。 false の場合は、新規のインスタンスが、それを必要とするそれぞれのコンテナーごとに作成されます。 例えばパーツの場合、singleton=:"false" により、1 つのインスタンスがパーツごとに作成されます。