An open API service indexing awesome lists of open source software.

https://github.com/marcelsud/melody-di

A simple and portable dependency injection library.
https://github.com/marcelsud/melody-di

container dependency-injection dip ioc solid typescript

Last synced: about 2 months ago
JSON representation

A simple and portable dependency injection library.

Awesome Lists containing this project

README

          

# 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

```bash
npm install --save @marcelsud/melody-di
```

or

```bash
yarn add @marcelsud/melody-di
```

## 🔥 Usage

### Adding and getting a dependency

Creating a container and adding dependencies is pretty straightforward.

First, create the container:

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

After that add some dependency into the container:

```typescript

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

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

Then, get it somewhere else:

```typescript
const calculatorService = container.get('calculator_service')
console.log(calculatorService.sum(10, 5)) // 15
```

It can also be added as a promise

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

// 2000 years later...

const service = await container.get>('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:

```typescript
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:

```bash
npm t
```

or

```bash
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](https://choosealicense.com/licenses/mit/)