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.
- Host: GitHub
- URL: https://github.com/marcelsud/melody-di
- Owner: marcelsud
- License: mit
- Created: 2019-01-16T13:14:48.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-06-17T00:13:39.000Z (almost 4 years ago)
- Last Synced: 2026-04-26T07:34:03.142Z (about 2 months ago)
- Topics: container, dependency-injection, dip, ioc, solid, typescript
- Language: JavaScript
- Homepage:
- Size: 238 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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/)