IExecutableExtension und die zugehörige Factory

splitshade

Mitglied
Hallo,

ich versuche mir gerade klar zu machen, was der Unterschied bzw der UseCase für einmal IExecutableExtension und IExecutableExtensionFactory ist.
Meinem Verständnis nach ist das so:
Wenn ich ein Plugin an einen ExtensionPoint "andocke", und hier z.B. konkrete Klassen zu meinem Projekt hinzufügen möchte, mach ich dies ja mit "createExecutableExtension(..)".
Will ich der konkreten Klasse noch Initialisierungsparameter mitgeben, sollte diese das Interface "IExecutableExtension" implementieren, da ich hier deklarativ in xml Paramter angeben kann. Will ich jetzt noch genauere Initialisierungen machen, benutze ich statt
IExecutableExtension eine IExecutableExtensionFactory.
Mein Plugin welches an den ExtensionPoint andockt, liefert also eine IExecutableExtensionFactory, welche mir dann mit der Methode "create()" ein konkretes Object meiner Klasse

Die Implementierung der Methode könnte dann wohl so aussehen
Code:
public Object create() throws CoreException
{
  return new ImplementierungMeinerKlasse(param1,param2,param3);
}

Ist das soweit korrekt? oder hakts irgendwo bei meinem Verständnis?
Über eine AUfklärung würde ich mich freuen.
Gruß

Martin
 
Hallo,

bei einer IExecutableExtension wird intern einfach sowas wie ein Class.forName("...").newInstance() gemacht, wobei dann die Möglichkeit besteht über setInitializationData(...) auf die in der Konfiguration hinterlegten Elemente zuzugreifen. Bei einer IExecutableExtension ist also der Weg wie diese Extension erzeugt wird (per newInstance())... schon festgelegt.

Mit der IExecutableExtensionFactory hast du hier mehr Freiheiten. So könntest du beispielsweise die Instanzen nicht händisch per newInstance(...) erzeugen sondern einen "externen" Objekt Container wie einen Spring ApplicationContext oder einen Guice Injector nach entsprechnd Konfigurierten Instanzen befragen. Du hast hier halt die volle Kontrolle darüber WIE die Instanzen für die Extension erzeugt werden.

Gruß Tom
 
Zurück