Einzelnen Beitrag anzeigen

TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.827 Beiträge
 
Delphi 12 Athens
 
#1

Spring4D DI-Container Exception

  Alt 17. Mär 2021, 15:29
Hallo,

ich versuche gerade mittels Nick Hodge's "Coding in Delphi" Buch den DI-Container von Spring4D
für mein DLL Projekt zu nutzen, allerdings noch ohne Erfolg.

Ich habe die Situation in der es mehrere Layer gibt. Jeder Layer ist eine Klasse mit einem in
einer extra Unit befindlichen Interface. Jeder der Konstruktoren bekommt eine Interface Referenz
der schichtenmäßig darunter liegenden Klasse, kennt also nur das Interface, nicht die konkrete
implementierung.

In jeder konkreten Implementierungsunit habe ich im Implementation Teil Code wie diesen:

GlobalContainer.RegisterType<TMyLayer1>.Implements<IMyLayer1>('layer1').InjectConstructor(['Layer2']); In der DPR habe ich alle die konkreten implementierungs Units und alle Interface Units drin und das
hier im Uses:

Delphi-Quellcode:
Spring.Container,
Spring.Services,
Spring.Collections
und in implementation:

GlobalContainer.Build; Mit dem Debugger kann ich nachweisen, dass beim Laden der DLL alle diese RegisterType Aufrufe und
der Build Aufruf ausgeführt werden.

In einer function die aus der DLL exportiert wird und von einem Testprogramm aufgerufen wird
versuche ich dann das hier:

Delphi-Quellcode:
function MyDoIt:Boolean;
var
  Layer1: IMyLayer1;
begin
  Layer1 := ServiceLocator.GetService<TMyLayer1>;
Was kommt ist diese Exception:
Fehler in MyDoIt: Cannot resolve type: TMyLayer1

Die kommt auch wenn ich GetService<IMyLayer1> aufrufe.
Woran liegt das?

Grüße
TurboMagic
  Mit Zitat antworten Zitat