AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Dependency Injection - zirkulare Abhängigkeiten / Lazy Init?

Dependency Injection - zirkulare Abhängigkeiten / Lazy Init?

Ein Thema von Sequitar · begonnen am 15. Apr 2019 · letzter Beitrag vom 16. Apr 2019
Antwort Antwort
Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Dependency Injection - zirkulare Abhängigkeiten / Lazy Init?

  Alt 16. Apr 2019, 11:50
Hallo, danke für die Antwort.
Zitat:
Das hat ja mit DI an sich erst einmal gar nichts zu tun.
Mit dem Prinzip an sich nicht, stimmt. Vielleicht habe ich mein Problem auch falsch beschrieben.
Den Artikel kannte ich noch nicht, danke. [Weak] ist mir ein Begriff, [unsafe] bisher noch nicht. Hat aber, erstmal, seinen Dienst getan:

Delphi-Quellcode:
 TKnight = Class(Tinterfacedobject, Iknight)
  Private
    [Inject('tsword')]
    FWeapon: IWeapon;
    [Inject('tfist')]
    FWeapon2: IWeapon;
    [Inject('tknight')]
    [unsafe]//unsafe attribute. Solves problem w/ manual construction
    Fcompanion: Iknight;
{ [...]}
  
  Public
    Constructor Create(Companion: Iknight);
    Destructor Destroy; Override;
{...}
  End;

destructor tknight.destroy;
begin
fsecondknight:=nil;
inherited;
end;

procedure test;
var knight1,knight2:iknight;
begin
knight1:=tknight.create(nil);
knight2:=tknight.create(knight1);
knight1:=nil; //der Vollständigkeit halber
end;

Es geht mir aber weniger (vielleicht auch) um die normale Erstellung solcher von einander abhängigen Objekte, wie oben. Vielmehr gehts mir um das Automatisieren der Erstellung per Attribut (inject['companionclassname']). Wie kann ich festlegen, dass der zweite (n.te) KEINEN companion mehr braucht, oder der nur bei Bedarf angelegt wird, statt automatisch beim Auffinden des [inject] eine Endlosrekursion anzustoßen?
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.520 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Dependency Injection - zirkulare Abhängigkeiten / Lazy Init?

  Alt 16. Apr 2019, 12:01
Hallo,
ich bin mir unsicher ob ich dich richtig verstanden habe.
Auf jeden Fall injiziert man bei DI nur Dinge die man braucht. Ein mal brauchen und mal nicht gibt es nicht. In dem Fall braucht ein Ritter keinen zweiten. Ein Ritter IST auch alleine eine Ritter. Eine Beziehung zu einem anderen Ritter muss man dann anderweitig besorgen. Ggf. könnte man eine factory reinreichen.
  Mit Zitat antworten Zitat
Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Dependency Injection - zirkulare Abhängigkeiten / Lazy Init?

  Alt 16. Apr 2019, 12:17
Hallo,
ich bin mir unsicher ob ich dich richtig verstanden habe.
Auf jeden Fall injiziert man bei DI nur Dinge die man braucht. Ein mal brauchen und mal nicht gibt es nicht. In dem Fall braucht ein Ritter keinen zweiten. Ein Ritter IST auch alleine eine Ritter. Eine Beziehung zu einem anderen Ritter muss man dann anderweitig besorgen. Ggf. könnte man eine factory reinreichen.
Also konzeptionelles Problem?
Gut vom Begriff her ist eine dependency ja eine Abhängigkeit, in dem Fall wäre es ja, wie du schreibst,keine Abhängigkeit, sondern eher eine Option...Insofern müsste ich da wohl von constructor oder attribut-based injection (obligatorisch) auf get/set injection (fakultativ)umsatteln. Da kann ich dann die Beziehung ja manuell herstellen.Macht eigentlich Sinn.

Ich hatte, in Bezug auf lazy init, nur gedacht, dass das auch zu automatisieren sei? Oder brauch ich das dann gar nicht?

Danke
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz