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