@dupkey/container
v1.0.8
Published
A TypeScript dependency injection container.
Downloads
3
Maintainers
Readme
@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. Returnsundefined
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.