@dupkey/container
TypeScript icon, indicating that this package has built-in type declarations

1.0.8 • Public • Published

@dupkey/container

A TypeScript dependency injection container.

Install

npm install @dupkey/container

Example

Construct the container and then create services

import { Container } from '@dupkey/container';

const container = new Container();

const config = {
    filename: 'app.log',
    rotate: true
}

container.create('config', config);
container.create('logger', LoggerClass, ['config'], true);
container.create('user', User, ['logger']);
...
container.get('user');

Construct the container with dependencies

import { Container, ContainerBuilderInterface } from '@dupkey/container';
...

let dependencies: Map<string, ContainerBuilderInterface> = new Map([
  [
    'singleton', {
      definition: singleton,
      dependencies: [],
      singleton: true
    }
  ], [
    'test', {
      definition: test,
      dependencies: ['singleton']
    }
  ], [
    'test2', {
      definition: { foo: 'bar' }
    }
  ]
]);

let container = new Container(dependencies);

Initialize container via Middy compatible middleware

Create services in the classic onion-like middleware pattern.

import * as middy from 'middy';
import mariadb from '@dupkey/mariadb-lambda';
import { Container, middleware } from '@dupkey/container';
import dependencies from './dependencies';
...
export const handler = middy(serverHandler)
  .use(mariadb.middleware(
    String(process.env.MARIADB_HOST),
    String(process.env.MARIADB_USER),
    String(process.env.MARIADB_PASSWORD),
    String(process.env.MARIADB_DATABASE),
    { namedPlaceholders: true }
  ))
  .use(middleware(new Container(dependencies), new Map([
    ['connection', { definition: mariadb.connection, singleton: true }]
  ])));

Methods

Use these methods in your...

  • create(name: string, definition: any, dependencies: string[] = [], singleton: boolean = false): void: Create a new service in the container.

  • get(name: string): any | undefined: Gets a service from the container. Returns undefined if no service exists.

Build the TypeScript and JavaScript versions

npm run build

Run the tests

npm test

VS Code Debugging

Create a launch.json file in your .vscode folder with the following:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Mocha Tests",
      "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
      "args": [
        "--require", "ts-node/register",
        "-u", "tdd",
        "--timeout", "999999",
        "--colors", "--recursive",
        "${workspaceFolder}/test/**/*.ts"
      ],
      "internalConsoleOptions": "openOnSessionStart"
    }
  ]
}

In the debug tab (Ctrl+Shift+D) select "Mocha Tests" from the dropdown and then click "Start Debugging". Results will display in the console on the bottom of the VS Code.

Dependencies (1)

Dev Dependencies (11)

Package Sidebar

Install

npm i @dupkey/container

Weekly Downloads

1

Version

1.0.8

License

MIT

Unpacked Size

17.1 kB

Total Files

15

Last publish

Collaborators

  • nicgene