Dependency injection versus dependency inversion

Many articles use the terms dependency injection and dependency inversion as if their meanings were identical, but they are two very different concepts.

The following example declares a class named Ninja and a class named Katana. The Ninja class has a dependency on the class Katana:

class Katana { 
    public tryHit(fromDistance: number) { 
        return fromDistance <= 2; 
    } 
} 
 
class Ninja { 
    public constructor( 
        private _katana: Katana 
    ) {} 
    public fight(fromDistance: number) { 
        return this._katana.tryHit(fromDistance); 
    } 
} 

After declaring the preceding classes, we can inject an instance of Katana into the Ninja class:

const ninja = new Ninja(new Katana()); ninja.fight(2); // true ninja.fight(5); // false ...

Get Learning TypeScript 2.x - Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.