Suppongo che tu abbia impostato la dipendenza per delegare alcune funzioni o un'alternativa all'ereditarietà per aggiungere o modificare la funzionalità di una classe senza estenderla.
Uno:
Nella maggior parte dei casi simili si inietta la dipendenza in modo che possa essere utilizzata in più di una posizione, quindi ha senso averla come parte dello stato, cioè, diversi metodi pubblici o privati potrebbero delegare alcune funzioni alla dipendenza hai iniettato. È possibile iniettare la dipendenza nel costruttore o con getter.
Inoltre, puoi iniettare più di una dipendenza per delegare diverse funzioni a loro:
Thing t = new Thing(method, collation, locale);
t.convert(someData);
t.validate(someData);
t.format(someData);
o
Thing t = new Thing();
t.setMethod(method);
t.setCollation(collation);
t.setLocale(locale);
t.convert(someData);
t.validate(someData);
t.format(someData);
due:
Se passi solo un oggetto a un metodo da utilizzare in quel metodo e cioè, non è veramente considerato l'iniezione di una dipendenza. Passa un parametro a un metodo che sembra essere solo un tipo non primitivo, anche se chiami alcuni dei metodi di quell'oggetto. Una volta che doStuff(Dependency d)
è stato eseguito, nessun riferimento a d
è contenuto nello stato della classe, quindi nulla è stato "iniettato" nella classe.
È così:
public method PrintPersonDetails(Person p){
p.printDetails();
// when it ends, no reference to p stays inside this class
// so you injected nothing
}
Quindi, per rispondere alla tua domanda , le dipendenze che vuoi formare sono dello stato degli oggetti e a cui l'oggetto delegherà alcune funzioni, cambiando così il suo comportamento senza dover estendere la classe , può essere passata nel contructor o tramite getters .
L'altra cosa non è l'iniezione di dipendenza.