Giter VIP home page Giter VIP logo

melody-di's Introduction

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.