Ich mache das ganz einfach...
Erstmal die die Voraussetzung eine entsprechende Factory, die die Klassen zu den Interfaces erzeugen kann.
Die Interfaces sind themenbezogen in Definitions-Units. Die Implementation ist NIE im Interface teil der
Unit, somit linkt auch keiner "dagegen".
Ggf. gibt es noch einen IFDEF für die Unittests, damit man doch an die Klasse "ran kommt".
Ich brauche dann überall nur die Factory und die Interface
Unit an zu geben.
ggf. nutze ich auch das Singelton Pattern - wie es Delphi auch macht mit.
Services.Default.Whatever.
Es gibt in meinem
FDK auch noch die Möglichkeit, nur für einen Moment ein Interface zu erzeugen.
Beispiel:
Delphi-Quellcode:
begin
TAnyFactory.Default.CallIfExists<IFOO>(Procedure (AFoo : IFoo)
begin
AFoo.Whatever;
end,'special'); // Optionaler Selector
end;
Wenn die
Unit, die IFoo Implementiert im Projekt enthalten ist wird die Funktionalität aufgerufen, sonst nicht.
Und die Instance existiert nur für die Dauer der anonymen procedure.
(Bei Klassen mit autofree)
Somit kann ich durch hinzufügen, z.B. eines Plugin,s Funktionalitäten an und abschalten.
Mavarik