tiny-dependecy-injection

1.0.3 • Public • Published

Tiny-dependecy-injection

a simple library for dependency injection in node

Installation

npm install --save tiny-dependency-injection

Usage: register and get services

// reporitories/UserReporitory.js

export default class UserReporitory {
  /**
   * @param {ExampleService} exampleService
   */
  constructor(exampleService) {
    this._exampleService = exampleService;
  }

  ...
}

You can register this in the container as a service:

import {ContainerBuilder} from 'tiny-dependecy-injection'
import {UserReporitory} from './reporitories/UserReporitory.js'
import {ExampleService} from './services/ExampleService' 

const container = new ContainerBuilder()

container.register('service.example', ExampleService)
container
    .register('reporitories.ures-repository', UserReporitory)
    // For the argument to return an instance of the service, the prefix '@' must be used, 
    // otherwise it will be taken as a string
    .addArgument('@service.example')

And get services from your container

const reporitory = container.get('@reporitories.ures-repository')

You can also configure the scope of the service, by default it is scoped

container
    .register('reporitories.ures-repository', UserReporitory)
    .addArgument('@service.example')
    .asSingleton()

or

container
    .register('reporitories.ures-repository', UserReporitory)
    .addArgument('@service.example')
    .asScoped()

Arguments

any type of arguments can be set

container
    .register('reporitories.ures-repository', UserReporitory)
    .addArgument('string')
    .addArgument(true)
    .addArgument({ environment: 'test' })
    .addArgument('@service.example')
    .addArgument(new ExampleService())

To use environment variables in arguments is done as follows;

container
    .register('reporitories.ures-repository', UserReporitory)
    .addArgument('$env(MY_VARIABLE)')

NOTE: If the variable does not exist, an error will be thrown.

Factories

factories can also be registered

//factories/ServiceFactory.js
import {ExampleService} from './services/ExampleService' 

export default class ServiceFactory {
    static createServise(param) {
        return new ExampleService(param)
    }
}

To register the factories you have to specify the name of the function to be invoked, you can also assign parameters to the factory function

container
    .register('factories.ServiceFactory', ServiceFactory, 'createServise')
    .addArgument('param')

Mentions

For this package I was inspired by Node Dependency Injection

Package Sidebar

Install

npm i tiny-dependecy-injection

Weekly Downloads

2

Version

1.0.3

License

MIT

Unpacked Size

23 kB

Total Files

15

Last publish

Collaborators

  • damet24