Fowler's example implemented in C++ using GoogleFruit can be found on GitHub.
Dependency injection describes a pattern applying the concept of inversion of control to lookup plugin implementations (or specifically, interface implementations). In the course of the article, Fowler describes the three different types of dependency injection:
The example used for illustration is shown in Figure 1. A movie finder allows a user to query movies according to different criteria. As movie source, the movie finder uses a movie lister which returns a list of available movies. In this scenario, the movie finder explicitly instantiates the underlying movie lister. With dependency injection, we want to avoid this explicit dependency, by "injecting" the movie lister implementation into the movie finder. For this task, a dependency injection framework may be used. The framework acts as "assembler", knowing the concrete implementation to use as well as the component to inject it into. The class diagram of Figure 1 changes to the one in Figure 2.
Figure 1: Simple class diagram illustrating the situation without dependency injection. The movie finder explicitly needs to instantiate the movie finder implementation to use. Instead, we would prefer to "inject" the concrete movie finder implementation to the movie lister.
What is your opinion on the summarized work? Or do you know related work that is of interest? Let me know your thoughts in the comments below or get in touch with me: