You have a class. This class uses some other class.
But by using or creating an instance of this other class directly you create a 
dependency on something concrete.
That’s not what you want, because you might want to replace this with something 
else if required. For example with a mock or fake implementation in a test.
‚Dependency injection‘ allows you to declare this dependency with just an 
interface/protocol and have some other facility (the dependency injection 
framework) ‚inject‘ a concrete object at run-time.
A similar thing could certainly be done by just using a constructor parameter 
(strategy pattern).
But I think the important part here is the dependency on just an interface and 
not on a concrete implementation. For flexibility.



Manfred


> Am 06.02.2021 um 22:27 schrieb Marco Antoniotti <marco.antonio...@unimib.it>:
> 
> I know I could look it up in Wikipedia, but posing the question here may 
> probably generate more amusement.
> 
> WTF is a “dependency injection”?
> 
> MA
> 
> 
> On Sat, 6 Feb 2021 at 22:18, Scott McKay <swmc...@gmail.com> wrote:
> 
> Nobody in the list community ever invented a fancy pants term like 
> “dependency injection”
> because it’s so obvious how to do this that nobody thought to give it a name.
> 
> —Scott
> 
> > On Feb 6, 2021, at 4:07 PM, Manfred Bergmann <manfred.bergm...@me.com> 
> > wrote:
> > 
> > 
> > 
> >> Am 06.02.2021 um 21:44 schrieb Luís Oliveira <luis...@gmail.com>:
> >> 
> >>> On Sat, 6 Feb 2021 at 20:07, Rudi Araújo <rudi.ara...@gmail.com> wrote:
> >>> Class::newInstance() doesn't have any parameters (also, it's deprecated: 
> >>> better to use getConstructor() or getDeclaredConstructor() and call 
> >>> newInstance() on it).
> >> 
> >> I guess this bit about getConstructor() explains why it'd be more
> >> convenient to use a Factory, or the Factory method pattern, or some
> >> dependency injection framework.
> >> 
> > 
> > Yeah. Could be.
> > But this constructor thingy could be hidden in a function similar as you 
> > would create a constructor function make-foo in Common Lisp.
> > The reflection stuff is not considered a good practice in certain types of 
> > applications.
> > 
> > Dependency injection is about something else IMO. Well, Abstract Factory is 
> > about it, too, inversion of control.
> > It allows you to create something without having to know the concrete type 
> > and without having to have a source dependency on it.
> > In Common Lisp this could be solved easily by just separating a protocol 
> > from the implementation, maybe in separate packages.
> > 
> > 
> > 
> > Manfred
> 
> -- 
> Marco Antoniotti, Associate Professor                 tel. +39 - 02 64 48 79 
> 01
> DISCo, Università Milano Bicocca U14 2043             
> http://bimib.disco.unimib.it
> Viale Sarca 336
> I-20126 Milan (MI) ITALY


Reply via email to