Aggiunta di nuove interfacce

È possibile trasmettere nuovi tipi di oggetti nel costruttore di una parte, registrandoli con il punto di estensione org.eclipse.core.component.types. A questo punto, diventa necessario introdurre il termine componente. Un componente è un tipo di oggetto creato da un punto di estensione inserendo argomenti al costruttore. Le parti di nuovo stile rappresentano un componente, ma esistono anche altri tipi di componenti.

Il seguente esempio mostra un'estensione di tipi. L'esempio specifica che l'interfaccia INameable deve essere disponibile dal sito delle parti.

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

L'attributo initializer indica dove verrà utilizzata l'interfaccia. Ad esempio, la stringa "org.eclipse.ui.part.SiteInitializer" indica che l'interfaccia viene utilizzata in un sito di parti. Inoltre è possibile utilizzare "org.eclipse.ui.part.PartInitializer" se l'interfaccia è destinata alle stesse parti da implementare.

L'attributo interface è lo stesso attributo dell'interfaccia. Deve corrispondere esattamente al tipo che il componente riceverà nel rispettivo costruttore. Se è stata creata un'estensione che fornisce stringhe e un componente richiede un oggetto, non verrà utilizzata l'estensione anche se fosse di tipo compatibile.

L'attributo implementation identifica l'implementazione predefinita dell'interfaccia. Fa riferimento a una classe di componenti che implementa l'interfaccia oppure a ComponentFactory che può crearli. Per ulteriori informazioni, fare riferimento alla sezione ComponentFactory. Questa implementazione viene utilizzata per soddisfare una dipendenza ogni qual volta un componente richiede questa interfaccia e non può essere trovata nel contesto principale. Tutte le interfacce devono fornire un'implementazione predefinita. Ciò significa che un componente scritto correttamente funzionerà sempre in un determinato ambito, a prescindere dal numero di dipendenze fornite dal contesto principale. L'implementazione non può sovrascrivere o estendere l'attributo di interfaccia implementando interfacce aggiuntive. Gli altri componenti possono dipendere da questo componente mediante la rispettiva interfaccia registrata, ma non possono dipendere direttamente dalla classe di implementazione.

L'attributo singleton indica se l'implementazione predefinita è un singleton. In caso affermativo, verrà creata una singola istanza e verrà condivisa tra ogni altro componente che le necessita. In caso contrario, verrà creata una nuova istanza per ciascun contenitore. Ad esempio, nel caso delle parti singleton=:"false" indica che viene creata un'istanza per ciascuna parte.