Facilities to manage artifacts and their dependencies in your Node.js applications. The module exposes TypeScript/JavaScript APIs and decorators to register artifacts, declare dependencies, and resolve artifacts by keys. It also serves as an IoC container
npm install @loopback/contextThis module provides facilities to manage artifacts and their dependencies usingContext in your Node.js applications. It can be used independent of the
LoopBack framework.
The @loopback/context package exposes TypeScript/JavaScript APIs and
decorators to register artifacts, declare dependencies, and resolve artifacts by
keys. The Context also serves as an
IoC container to support
dependency injection.
Context and Binding are the two core concepts. A context is a registry of
bindings and each binding represents a resolvable artifact by the key.
- Bindings can be fulfilled by a constant, a factory function, a class, or a
provider.
- Bindings can be grouped by tags and searched by tags.
- Binding scopes can be used to control how a resolved binding value is shared.
- Bindings can be resolved synchronously or asynchronously.
- Provide @inject and other variants of decorators to express dependencies.
- Support Constructor, property, and method injections.
- Allow contexts to form a hierarchy to share or override bindings.
- Track bindings and injections during resolution to detect circular
dependencies.
``sh`
npm install --save @loopback/context
`js`
const Context = require('@loopback/context').Context;
const ctx = new Context();
ctx.bind('hello').to('world'); // BindingKey='hello', BindingValue='world'
const helloVal = ctx.getSync('hello');
console.log(helloVal); // => 'world'
The binding can also be located asynchronously:
`ts`
const helloVal = await ctx.get('hello');
console.log(helloVal); // => 'world'
`ts
import {Context, inject} from '@loopback/context';
const ctx = new Context();
// bind 'greeting' to 'Hello' as the constant value
ctx.bind('greeting').to('Hello');
class HelloController {
constructor(
// injecting the value bound to greeting using context
@inject('greeting') private greeting: string,
) {}
greet(name) {
return ${this.greeting}, ${name};
}
}
// Bind 'HelloController' to class HelloController
ctx.bind('HelloController').toClass(HelloController);
async function hello() {
// Get an instance of HelloController
const helloController = await ctx.get
// helloController now has the greeting property injected with Hello
console.log(helloController.greet('John')); // => Hello, John
}
hello();
`
For additional information, please refer to the
Context page.
To learn more about advanced features, check out standalone examples at
@loopback/example-context.
Use the following command to download the example project to try out:
`sh`
lb4 example context
Run npm test` from the root folder.
See
all contributors.
MIT