Gibt es vielleicht einen eleganten Weg, die in Spring4D automatisch registrierten Typen/Componenten wieder zu listen, ohne eine zusätzliche Info-Struktur vorhalten zu müssen?
Mein modulares Programm hat folgende Struktur:
Delphi-Quellcode:
IccApp = interface
['{D91CB460-F196-43C9-8633-4E5759164FB8}']
function DisplayName : string;
end;
IccTestApp = interface(iccApp)
['{2CAC3397-B984-45BE-B255-56E5FD6220F5}']
function BackstageView: TBackstageView;
function ColorSchemeAccent : TColorSchemeAccent;
end;
TccApp_BackstageTest = class(TInterfacedObject, IccTestApp, IccApp) //das benötigt Spring4D, sonst gibt's einen Fehler
private
FBackstageBaseFormTest : TBackStageVM;
private
function DisplayName : string;
function BackstageView: TBackstageView;
function ColorSchemeAccent : TColorSchemeAccent;
public
constructor Create;
destructor Destroy; override;
end;
initialization
GlobalContainer.RegisterType<TccApp_BackstageTest>.Implements<IccTestApp>.Implements<IccApp>;
Nun hätte ich gern die Möglichkeit, die auf diese Weise registrierten Typen nach Bedarf wieder "einzusammeln" und z.B. in einer Liste alle Services aufzuführen, die IccApp implementieren.
Weder
Delphi-Quellcode:
var
aListArray : TArray<IccApp>;
aItem : IccApp;
begin
aListArray := GlobalContainer.ResolveAll<iccApp>;
for aItem in aListArray do
ShowMessage(aItem.DisplayName);
noch
Delphi-Quellcode:
var
aListArray : TArray<TValue>;
aItem : TValue;
begin
aListArray := GlobalContainer.Context.ServiceResolver.ResolveAll(TypeInfo(iccApp));
for aItem in aListArray do
ShowMessage(aItem.AsType<IccApp>.DisplayName);
bringen mich so richtig weiter.