@decorators/di

node decorators - decorators for dependency injection

Stats

StarsIssuesVersionUpdatedCreatedSize
@decorators/di
25231.0.35 months ago4 years agoMinified + gzip package size for @decorators/di in KB

Readme

Node Decorators

Dependency Injection module for node-decorators project

Installation

npm install @decorators/di --save

API

  • @Injectable() - Registers class as provider in the container (no need to provide it via Container.provide)

    @Injectable()
    class HttpService {}
    
  • @Inject(injectable: Injectable) - A parameter decorator that marks parameter as dependency.

    @Injectable()
    class HttpService {
    constructor(@Inject(API_URL) apiUrl: string) {}
    }
    
  • @Optional() - A parameter decorator that marks parameter as optional dependency.

    @Injectable()
    class HttpService {
    constructor(@Optional() @Inject(API_URL) apiUrl: string) {}
    }
    
  • InjectionToken - Creates a token that can be used in DI as Provider.

    const API_URL = new InjectionToken('API_URL');
    ...
    @Injectable()
    class HttpService {
    constructor(@Inject(API_URL) apiUrl: string) {}
    }
    
  • Container - Container interface

    • .provide(providers: Providers[]) - Registers an array of providers.
    • .get(injectable: Injectable) - Retrieves an instance of the injectable, throws:
      • MissingProviderError if dependency provider wasn't found
      • RecursiveProviderError in case of recursive dependency injection

Full example

import {
  Injectable,
  Inject,
  Container,
  InjectionToken
} from '@decorators/di';

const API_URL = new InjectionToken('API_URL');

@Injectable()
export class HttpService {
  constructor(
    @Inject(API_URL) private apiUrl: string
  ) {}

  public send(options: object): Promise<any> {
    return fetch(this.apiUrl, options);
  }
}

Container.provide([
  { provide: API_URL, useValue: 'http://server.localhost' }
]);

const httpService = Container.get<HttpService>(HttpService);
...

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.