@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.

Dependents (0)

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