Přidávání nových rozhraní

Nové typy objektů lze předávat do konstruktoru části jejich registrací bodem rozšíření org.eclipse.core.component.types. Nyní vyložíme termín komponenta. Komponenta je objekt libovolného typu, který byl vytvořen z bodu rozšíření vložením argumentů do jeho konstruktoru. Části nového typu jsou určitým typem komponenty, k dispozici však jsou i jiné typy komponent.

Následující příklad předvádí ukázku rozšíření typů. Tento příklad určuje, že rozhraní INameable má být dostupné z webu části.

<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>

Atribut initializer signalizuje, kde bude rozhraní použito. Například řetězec "org.eclipse.ui.part.SiteInitializer" znamená, že rozhraní bude použito v části webu. Pokud je rozhraní určeno rovněž k implementaci samotných částí, mělo by implementovat rovněž rozhraní "org.eclipse.ui.part.PartInitializer".

Atribut interface obsahuje název rozhraní. Musí se přesně shodovat s typem, který komponenta obdrží prostřednictvím svého konstruktoru. Vytvoříme-li rozšíření, které poskytuje řetězce, a vyžádá-li si komponenta objekt, nepoužije naše rozšíření dokonce ani v případě, že bude kompatibilního typu.

Atribut implementation identifikuje výchozí implementaci rozhraní. Ukazuje buď na třídu komponenty, která implementuje rozhraní, nebo na ComponentFactory, která ji může vytvořit. Další informace viz sekce ComponentFactory. Tato implementace se používá ke splnění závislosti vždy, když komponenta vyžaduje toto rozhraní a nelze je nalézt v nadřazeném kontextu. Všechna rozhraní musejí poskytnout výchozí implementaci. To znamená, že správně napsaná komponenta vždy pracuje v daném rozsahu nezávisle na počtu závislostí poskytnutých jejím nadřazeným kontextem. Implementace nemůže potlačit ani rozšířit atribut rozhraní implementací přídavných rozhraní. Ostatní komponenty mohou záviset na této komponentě prostřednictvím jejího registrovaného rozhraní, avšak nemohou záviset přímo na implementaci třídy.

Atribut singleton signalizuje, zda je výchozí implementace jedináčkem. Je-li hodnota true, bude vytvořena jediná instance, která bude sdílena všemi komponentami, které ji vyžadují. Je-li hodnota false, bude pro každý kontejner, který si to vyžádá, vytvořena nová instance. Například u částí bude singleton=:"false" znamenat, že bude pro každou část vytvořena pouze jediná instance.