Ok, das Prinzip via Interfaces hab ich im Ansatz verstanden und werde mein Wissen diesbezüglich noch erweitern.
Was mir allerdings nicht ganz klar ist, wieso ich in die Interface-
Unit die "Objekt"-Units einbinden "muss". Ich habe sie mal zum Testen auskommentiert und die Klassendeklarationen (TEngine und TManager1) in den Interface-Teil der Units verschoben. So ist deren Sichtbarkeit gewährleistet. Oder blick ich grad nicht durch?
Habe die entsprechenden Stellen hier nur auskommentiert.
Delphi-Quellcode:
unit uInterfaces
interface
//uses
// Engine, Manager1;
type
IManager1 =
interface
[Shift+Strg+G]
end;
IEngine =
interface
[Shift+Strg+G]
function GetManager1 : IManager1;
property Manager1: IManager1
read GetManager1;
end;
Delphi-Quellcode:
unit Engine;
interface
//implementation
uses
uInterfaces;
type
TEngine =
class(TInterfacedObject, IEngine)
private
FManager1: IManager1;
function GetManager1 : IManager1;
end;
implementation
...
Delphi-Quellcode:
unit Manager1;
interface
//implementation
uses
uInterfaces;
type
TManager1 =
class(TInterfacedObject, IManager1)
private
FEngine: IEngine;
protected
public
constructor Create(e: IEngine);
end;
implementation
...
Sollte doch auch so funktionieren. Oder übersehe ich etwas?