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 ...