depenject-express is a middleware for express that provides dependency injection to your requests.

License: Apache-2.0

Language: TypeScript

Keywords: dependency, dependency-injection, di, express, injection, ioc, javascript, nodejs, npm, typescript


npm version Gitpod Ready-to-Code

depenject is a lightweight and fast IoC container to resolve dependencies, achieving Inversion of Control (IoC) between their dependencies.

depenject-express is a middleware for express that provides dependency injection to your requests.


For the latest stable version:

npm install depenject-express


There are many ways to contribute to depenject-express:



In order to build the depenject-express, ensure that you have Git and Node.js installed.

Clone a copy of the repo:

git clone

Change to the depenject-express directory:

cd depenject-express

Install tools and dev dependencies:

npm install

Use one of the following to build and test:

npm run build       # Build the library into "dist" directory.

A simple sample to copy-and-paste

import * as express from 'express';
import * as depenject from 'depenject';
import * as di from 'depenject-express'

const app = express();


// a single dependency are create once
class SingletonDependency {
  creation = Date();

// a scoped dependency are created once per request
class ScopedDependency {
  creation = Date();

app.use(di.depenject(services => {


class SayHelloEndpoint {
  requestContext: di.RequestContext;

  constructor(container: depenject.Container) {
    let contextAccessor = container.resolve(di.RequestContextAccessor);

    this.requestContext = contextAccessor.context;

  get message() {
    let { request } = this.requestContext;

    let name =;
    if (!name)
      name = 'World';

    return `Hello ${name}!`;

  execute() {
    const { request, response } = this.requestContext;

    const singletonSample = request.$services.resolve(SingletonDependency);
    const scopedSample = request.$services.resolve(ScopedDependency);
          <label for=name>Name:</label>
          <input name=name />
          <button>Say hello</button>
      <p>The singleton dependency was created at: ${singletonSample.creation}.</p>
      <p>The scoped dependency was created at: ${scopedSample.creation}.</p>

app.use('/', (req) => {

  // the dependency container can be accessed using $services property
  const messageProvider = req.$services.resolve(SayHelloEndpoint);




app.listen(3000, function () {
  console.log('Example app listening on port 3000!');


Copyright 2019 Rodrigo Speller

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Project Statistics

Sourcerank 3
Repository Size 20.5 KB
Stars 0
Forks 0
Watchers 1
Open issues 0
Dependencies 34
Contributors 1
Tags 2
Last updated
Last pushed

Top Contributors See all

Rodrigo Speller

Packages Referencing this Repo

[![npm version](](
Latest release 0.0.2 - Updated

Recent Tags See all

v0.0.2 December 26, 2019
v0.0.1 December 26, 2019

Something wrong with this page? Make a suggestion

Login to resync this repository