create-di-container
TypeScript icon, indicating that this package has built-in type declarations

0.1.0 • Public • Published

Create DI Container

Tiny universal ES-friendly dependency injection tool

npm version npm minzipped size npm type definitions npm downloads Build Status codecov npm license

Installation

npm install create-di-container

Usage

import express from "express";
import { Container, AbstractInjectableClass } from "create-di-container";
import db from "./db"; // Your custom database connection.
 
const app = express();
 
class UserRepo extends AbstractInjectableClass {
  get db() {
    // Take transaction or default connection.
    return (
      this.container.resolveValue("trx") || this.container.resolveValue("db")
    );
  }
 
  getUser(id) {
    return this.db.user.findOne({ id });
  }
 
  async editUser(id, values) {
    const entity = await this.getUser(id);
 
    return this.db.user.update(entity, values);
  }
}
 
app.use(req => {
  req.container = new Container();
  req.container.inject("db", db);
});
 
app.get("/users/:id", (req, res) => {
  const userRepo = req.container.resolveClass(UserRepo);
 
  userRepo.getUser(req.params.id).then(user => {
    res.json(user);
  });
});
 
app.put("/users/:id", (req, res) => {
  const db = req.container.resolveValue("db");
  const userRepo = req.container.resolveClass(UserRepo);
 
  db.transaction(trx => {
    // Replace current db.
    req.container.inject("trx", trx);
 
    return userRepo.editUser(req.params.id, req.body);
  }).then(user => {
    res.json(user);
  });
});

Readme

Keywords

none

Package Sidebar

Install

npm i create-di-container

Weekly Downloads

1

Version

0.1.0

License

MIT

Unpacked Size

10.1 kB

Total Files

14

Last publish

Collaborators

  • umidbekk