Forum: Algorithmen, Datenstrukturen und Klassendesign
by neo4a,
1. Feb 2012
Es gibt so oder so etwas boilerplate code, aber das Ergebnis rechtfertigt es: Dass die Uses-List in den Units meiner Projekte immer kürzer wird, gibt mir irgendwie ein gutes Gefühl ;)
Forum: Algorithmen, Datenstrukturen und Klassendesign
by neo4a,
1. Feb 2012
Eigentlich schon. Dein Einwand mit TComponent ist auch berechtigt, aber:
- sollte nicht der DI-Container die Lebenszyklen verwalten?
- sollte der DI-Container nicht auch Nicht-RefConted-Objekte "können"?
- der Default-Destruktor wurde ja durchlaufen.
- sollte ein leeres TDatamodule eigentlich keine MemLeaks erzeugen?
Wie auch immer: Derzeit und mangels gesicherter Erkenntnisse wrappe ich...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by neo4a,
1. Feb 2012
Das klingt schon überzeugend...noch überzeugender ist nur, dass die vorgeschlagene Änderung mit der Auslagerung in eine Prozedur leider keinen Effekt zeigte.
Diese anonyme Methode ist ja nur nötig, damit der Default-Konstruktor des DatenModuls aufgerufen wird. Möglicherweise passiert dabei noch etwas mehr. Nehme ich nun mein ungeliebtes Wrapper-Object, so verwaltet der DI-Vontainer das Objekt...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by neo4a,
1. Feb 2012
Vielen Dank für Deinen Tipp. Leider bringt Dein Vorschlag keine Besserung, obwohl ich ihn gern übernommen hätte. Meine Lösung mit einem Wrapper-Objekt erzeugt nicht gerade Clean Code, funktioniert dafür aber.
Dein Link enthält im Kommentar die Erklärung: Alle Variablen, die in einem Initialisierungsteil erzeugt werden, sind global. Damit fallen sie auch aus dem Scope, den der DI-Container...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by neo4a,
1. Feb 2012
Dependency Injection mit dem Spring4Delphi-Framework leistet bei mir seit einiger Zeit gute Dienste. Bislang habe ich das ausschließlich mit nicht-visuellen Klassen praktiziert.
Nun möchte ich das Konzept auf DataModules erweitern:
type
IdcWallpaper = interface
procedure CreateControl(aStartScreen : IdcStartScreen; aParent : TWinControl);
end;