Skip to content

A simple and portable dependency injection library.

License

Notifications You must be signed in to change notification settings

marcelsud/melody-di

Repository files navigation

Melody Dependency Injection

A simple dependency injection Container for Javascript/Typescript.

  • ☑️ Easy to use
  • ☑️ Maintainable
  • ☑️ Portable

📜 How to install

You can use NPM or Yarn to install it

npm install --save @marcelsud/melody-di

or

yarn add @marcelsud/melody-di

🔥 Usage

Adding and getting a dependency

Creating a container and adding dependencies is pretty straightforward.

First, create the container:

import { Container } from '@marcelsud/melody-di'
const container = new Container()

After that add some dependency into the container:

class CalculatorService {
  sum(a: number, b: number): number {
    return a + b;
  }
}

container.set('calculator_service', () => {
  return new CalculatorService()
})

Then, get it somewhere else:

const calculatorService = container.get<CalculatorService>('calculator_service')
console.log(calculatorService.sum(10, 5)) // 15

It can also be added as a promise

container.set('calculator_service', async (c: Container) => {
  const somethingElse = await c.get<Promise<SomethingElse>>('something_else')
  return new CalculatorService(somethingElse)
})

// 2000 years later...

const service = await container.get<Promise<CalculatorService>>('calculator_service')
console.log(service.sum(20, 30)) // 50

Adding a plain value into the container

You can add a static value into the container, such as a number, a string, or even an object:

container.set('some_config', 'SUPER_SECRET_INFORMATION')
container.set('some_important_ttl', 5000)
container.set('some_config_map', {
  something: 'QWERTYUIOPASDFGHJKL'   
})

// Directly instantiating the object
container.set('calculator_service', new CalculatorService())

🟢 Running the tests

To run the tets:

  npm t

or

  yarn test

🚀 About the author

I am a passionate Principal Software Engineer. Amongst my favorite topics are Clean Architecture, Domain-Driven Design and Event-Driven Architecture.

You can find me out on:

📝 License

MIT