Einzelnen Beitrag anzeigen

neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#1

[Spring4D] Automatische Service-Liste mittels ResolveAll

  Alt 26. Mai 2014, 09:43
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.
Andreas

Geändert von neo4a (26. Mai 2014 um 10:11 Uhr)
  Mit Zitat antworten Zitat