Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: ClassFactory ähnlich wie Spring Framework, Hilfe gesucht!

  Alt 6. Feb 2014, 13:34
Damit geht das
Delphi-Quellcode:
unit Container;

interface

uses
  System.Generics.Collections;

type
  GlobalContainer = class
  private
    class var _ClassDict : TDictionary<TGUID, TClass>;
  protected
    class constructor Create;
    class destructor Destroy;
  public
    class procedure RegisterClass<TInterface : IInterface; TRegClass : class>;
    class function GetClass<T : IInterface> : T;
  end;

implementation

uses
  System.SysUtils,
  System.TypInfo;

{ GlobalContainer }

class constructor GlobalContainer.Create;
begin
  _ClassDict := TDictionary<TGUID, TClass>.Create;
end;

class destructor GlobalContainer.Destroy;
begin
  _ClassDict.Free;
end;

class function GlobalContainer.GetClass<T> : T;
var
  LGUID : TGUID;
  LClass : TClass;
  LObj : TObject;
begin
  LGUID := GetTypeData( TypeInfo( T ) ).Guid;
  if _ClassDict.ContainsKey( LGUID ) then
  begin
    LClass := _ClassDict.Items[LGUID];
    LObj := LClass.Create;
    Supports( LObj, LGUID, Result );
  end;
end;

class procedure GlobalContainer.RegisterClass<TInterface, TRegClass>;
var
  LGUID : TGUID;
begin
  LGUID := GetTypeData( TypeInfo( TInterface ) ).Guid;
  _ClassDict.AddOrSetValue( LGUID, TRegClass );
end;

end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat