0.3.0 • Published 7 years ago

@msiviero/knit-di-express v0.3.0

Weekly downloads
1
License
MIT
Repository
github
Last release
7 years ago

Typescript lightweight dependency injection container for express

Installation

yarn add @msiviero/knit-di-express

Example of usage

Base usage:

import * as express from "express";
import { 
  ApiContainer, 
  api,
  component, 
  Container, 
  Exchange,
  get
} from "@msiviero/knit-di-express";

const app = express();
const apiContainer = ApiContainer.getInstance();

@component()
class Greeter {
  public greet(who: string) {
    return `Hello ${who}`;
  }
}

@api("/api/v1")
class ApiController {

  constructor(private readonly greeter: Greeter) { }

  @get("/hello")
  public hello(exchange: Exchange) {
    const who: string = exchange.request.query.who || "Nobody";
    exchange.response.json({
      message: this.greeter.greet(who),
    });
  }
}

apiContainer.registerApi(app, ApiController);
app.listen(3000);

Mocking dependencies

Registering mock dependencies for unit tests can be easily achieved via:

const app = express();
const apiContainer = ApiContainer.withContainer(Container.newContainer());

@component()
class Greeter {
  public greet(who: string) {
    return `Hello ${who}`;
  }
}

class CustomGreeter extends Greeter {
  public greet(who: string) {
    return `Custom Hello ${who}`;
  }
}

apiContainer.container.provide(Greeter, () => new CustomGreeter());

@api("/api/v1")
class ApiController {

  constructor(private readonly greeter: Greeter) { }

  @get("/hello")
  public hello(exchange: Exchange) {
    const who: string = exchange.request.query.who || "Nobody";
    exchange.response.json({
      message: this.greeter.greet(who),
    });
  }
}

apiContainer.registerApi(app, ApiController);