Hinzufügen neuer Schnittstellen

Neue Objekttypen können in einen Abschnittskonstruktor übergeben werden, indem sie mit dem Erweiterungspunkt org.eclipse.core.component.types registriert werden. An dieser Stelle sollten wir den Begriff Komponente einführen. Eine Komponente ist jede Art von Objekt, das von einem Erweiterungspunkt erstellt wird, indem Argumente in seinen Konstruktor injiziert werden. Abschnitte im neuen Stil sind eine Art von Komponente, aber es gibt auch andere Komponententypen.

Das folgende Beispiel zeigt die Erweiterung eines Mustertyps. Das Beispiel gibt an, dass die Schnittstelle 'INameable' von der Site eines Abschnittes zur Verfügung stehen sollte.

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

Das Attribut initializer gibt an, wo die Schnittstelle verwendet wird. So bedeutet z.B. die Zeichenfolge "org.eclipse.ui.part.SiteInitializer", dass die Schnittstelle auf der Site des Abschnitts verwendet wird. Wir könnten "org.eclipse.ui.part.PartInitializer" auch verwendet haben, wenn die Schnittstelle dazu bestimmt wäre, Abschnitte selbst zu implementieren.

Das Attribut interface ist der Name der Schnittstelle. Dies muss exakt mit dem Typ übereinstimmen, den die Komponente in ihrem Konstruktor empfängt. Wenn wir eine Erweiterung erstellen, die Zeichenfolgen liefert und eine Komponente ein Objekt verlangt, wird sie unsere Erweiterung nicht verwenden, selbst wenn es sich um einen kompatiblen Typ handeln würde.

Das Attribut implementation gibt die standardmäßige Implementierung der Schnittstelle an. Es verweist entweder auf eine Komponentenklasse, die die Schnittstelle implementiert, oder eine ComponentFactory, die diese erstellen kann. Weitere Informationen finden Sie im Abschnitt 'ComponentFactory'. Diese Implementierung dient dazu, eine Abhängigkeit zu erfüllen, wenn immer eine Komponente diese Schnittstelle verlangt, und sie kann nicht in ihrem übergeordneten Kontext gefunden werden. Alle Schnittstellen müssen eine Standardimplementierung liefern. Das bedeutet, dass eine korrekt geschriebene Komponente immer in einem gegebenen Bereich funktioniert, ungeachtet dessen, wie viele Abhängigkeiten von ihrem übergeordneten Kontext geliefert werden. Die Implementierung kann das Schnittstellenattribut nicht außer Kraft setzen oder erweitern. Andere Komponenten können von dieser Komponente durch ihre registrierten Schnittstellen abhängig sein, jedoch nicht direkt von der Implementierungsklasse abhängen.

Das AttributSingle zeigt an, ob die Standardimplementierung ein Single ist. Wenn dies 'true' ist, wird eine einzelne Instanz erzeugt und mit allen anderen Komponenten, die sie erfordern, gemeinsam benutzt. Wenn dies 'false' ist, wird eine neue Instanz für jeden Container, der dies erfordert, erstellt. So bedeutet zum Beispiel im Falle von Abschnitten 'singleton=:"false"', dass eine Instanz für jeden Abschnitt erstellt wird.