<extension
point="org.eclipse.core.component.types">
<composant
initializer="org.eclipse.ui.part.SiteInitializer"
interface="org.eclipse.ui.part.services.INameable"
implementation="org.eclipse.ui.internal.part.services.NullNameableService"
singleton="true"
/>
</extension>
L'attribut initializer indique où l'interface sera utilisée. Par exemple, la chaîne "org.eclipse.ui.part.SiteInitializer"
signifie que l'interface est utilisée sur un site de composant. Nous aurions également pu utiliser "org.eclipse.ui.part.PartInitializer"
si l'interface avait été destinée à l'implémentation des composants eux-mêmes.
L'attribut interface est le nom de l'interface. Il doit correspondre exactement au type que le composant recevra dans son constructeur. Si nous créons une extension fournissant des chaînes et qu'un composant demande un objet, il n'utilisera pas notre extension même si le type en est compatible.
L'attribut implementation identifie l'implémentation par défaut de l'interface. Il pointe vers une classe de composants qui implémente l'interface ou une 'Fabrique de composants' (ComponentFactory) qui peut les créer.
Pour plus d'informations, voir la section qui traite des 'Fabriques de composants' (ComponentFactory). Cette implémentation
est utilisée pour satisfaire une dépendance quand un composant demande cette interface
et qu'elle est introuvable dans son contexte parent. Toutes les interfaces doivent fournir une implémentation par défaut. Cela veut dire qu'un composant écrit correctement fonctionnera toujours dans une étendue donnée, quel que soit le nombre de dépendances fournies par son contexte parent. L'implémentation ne peut étendre ou se substituer à l'attribut interface en implémentant des interfaces supplémentaires. D'autres composants peuvent dépendre de ce composant au travers de ses interfaces enregistrées, mais ils ne peuvent pas dépendre directement de la classe d'implémentation.
L'attribut singleton indique si l'implémentation par défaut est un singleton. S'il est 'true', une seule instance sera créée et partagée entre tous les autres composants en ayant besoin. S'il est 'false', une nouvelle instance sera créée pour chaque conteneur qui en a besoin. Par exemple, dans le cas de composants, singleton=:"false" signifierait qu'une instance sera créé pour chaque composant.