All Projects → inversify → Inversify Basic Example

inversify / Inversify Basic Example

Licence: mit
A basic example that showcases how to setup InversifyJS

Programming Languages

typescript
32286 projects

inversify-basic-example

Join the chat at https://gitter.im/inversify/inversify-basic-example Build Status Dependencies img img

A basic example that showcases how to setup InversifyJS

This is a very basic InversifyJS example.

This program declares:

  • Three interfaces Warrior, Weapon and Battle.
  • Two implementations of Weapon: Katana and Shuriken
  • Two implementations of Warrior: Ninja and Samurai
  • One implementation of Battle: EpicBattle.

The warriors own a weapon and are tagged with some metadata.

We use some constraints whenTargetNamed and whenParentNamed to indicate which Weapon should be injected into and implementation of Warrior and which implementation of Warrior should injected into EpicBattle:

container.bind<Warrior>(SERVICE_IDENTIFIER.WARRIOR).to(Ninja).whenTargetNamed(TAG.CHINESE);
container.bind<Warrior>(SERVICE_IDENTIFIER.WARRIOR).to(Samurai).whenTargetNamed(TAG.JAPANESE);
container.bind<Weapon>(SERVICE_IDENTIFIER.WEAPON).to(Shuriken).whenParentNamed(TAG.CHINESE);
container.bind<Weapon>(SERVICE_IDENTIFIER.WEAPON).to(Katana).whenParentNamed(TAG.JAPANESE);
container.bind<Battle>(SERVICE_IDENTIFIER.BATTLE).to(EpicBattle);

How can I run it?

You can clone it using:

$ git clone https://github.com/inversify/inversify-basic-example.git

To run this example you need to install some dependencies:

$ cd inversify-basic-example
$ npm install

And compile the TypeScript code into JavaScript code:

$ gulp

The generated code is available at the dist directory.

At this point you are ready to run the example:

$ node dist/main.js

You should see the following in console:

FIGHT!
                Ninja (Shuriken)
                vs
                Samurai (Katana)
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].