---
lang: en
title: 'API docs: context.context'
keywords: LoopBack 4.0, LoopBack 4, Node.js, TypeScript, OpenAPI
sidebar: lb4_sidebar
editurl: https://github.com/loopbackio/loopback-next/tree/master/packages/context
permalink: /doc/en/lb4/apidocs.context.context.html
---

<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [@loopback/context](./context.md) &gt; [Context](./context.context.md)

## Context class

Context provides an implementation of Inversion of Control (IoC) container

**Signature:**

```typescript
export declare class Context extends EventEmitter 
```
**Extends:** EventEmitter

## Constructors

<table><thead><tr><th>

Constructor


</th><th>

Modifiers


</th><th>

Description


</th></tr></thead>
<tbody><tr><td markdown="1">

[(constructor)(\_parent, name)](./context.context._constructor_.md)


</td><td markdown="1">


</td><td markdown="1">

Create a new context.


</td></tr>
</tbody></table>

## Properties

<table><thead><tr><th>

Property


</th><th>

Modifiers


</th><th>

Type


</th><th>

Description


</th></tr></thead>
<tbody><tr><td markdown="1">

[\_debug](./context.context._debug.md)


</td><td markdown="1">

`protected`


</td><td markdown="1">

Debugger


</td><td markdown="1">

A debug function which can be overridden by subclasses.


</td></tr>
<tr><td markdown="1">

[\_parent?](./context.context._parent.md)


</td><td markdown="1">

`protected`


</td><td markdown="1">

[Context](./context.context.md)


</td><td markdown="1">

_(Optional)_ Parent context


</td></tr>
<tr><td markdown="1">

[configResolver](./context.context.configresolver.md)


</td><td markdown="1">

`protected`


</td><td markdown="1">

[ConfigurationResolver](./context.configurationresolver.md)


</td><td markdown="1">

Configuration resolver


</td></tr>
<tr><td markdown="1">

[name](./context.context.name.md)


</td><td markdown="1">

`readonly`


</td><td markdown="1">

string


</td><td markdown="1">

Name of the context


</td></tr>
<tr><td markdown="1">

[registry](./context.context.registry.md)


</td><td markdown="1">

`protected`

`readonly`


</td><td markdown="1">

Map&lt;string, [Binding](./context.binding.md)<!-- -->&gt;


</td><td markdown="1">

Key to binding map as the internal registry


</td></tr>
<tr><td markdown="1">

[scope](./context.context.scope.md)


</td><td markdown="1">


</td><td markdown="1">

[BindingScope](./context.bindingscope.md)


</td><td markdown="1">

Scope for binding resolution


</td></tr>
<tr><td markdown="1">

[subscriptionManager](./context.context.subscriptionmanager.md)


</td><td markdown="1">

`readonly`


</td><td markdown="1">

[ContextSubscriptionManager](./context.contextsubscriptionmanager.md)


</td><td markdown="1">

Manager for observer subscriptions


</td></tr>
<tr><td markdown="1">

[tagIndexer](./context.context.tagindexer.md)


</td><td markdown="1">

`protected`

`readonly`


</td><td markdown="1">

ContextTagIndexer


</td><td markdown="1">

Indexer for bindings by tag


</td></tr>
</tbody></table>

## Methods

<table><thead><tr><th>

Method


</th><th>

Modifiers


</th><th>

Description


</th></tr></thead>
<tbody><tr><td markdown="1">

[\_findByTagIndex(tag)](./context.context._findbytagindex.md)


</td><td markdown="1">

`protected`


</td><td markdown="1">

Find bindings by tag leveraging indexes


</td></tr>
<tr><td markdown="1">

[\_mergeWithParent(childList, parentList)](./context.context._mergewithparent.md)


</td><td markdown="1">

`protected`


</td><td markdown="1">


</td></tr>
<tr><td markdown="1">

[add(binding)](./context.context.add.md)


</td><td markdown="1">


</td><td markdown="1">

Add a binding to the context. If a locked binding already exists with the same key, an error will be thrown.


</td></tr>
<tr><td markdown="1">

[bind(key)](./context.context.bind.md)


</td><td markdown="1">


</td><td markdown="1">

Create a binding with the given key in the context. If a locked binding already exists with the same key, an error will be thrown.


</td></tr>
<tr><td markdown="1">

[close()](./context.context.close.md)


</td><td markdown="1">


</td><td markdown="1">

Close the context: clear observers, stop notifications, and remove event listeners from its parent context.


</td></tr>
<tr><td markdown="1">

[configure(key)](./context.context.configure.md)


</td><td markdown="1">


</td><td markdown="1">

Create a corresponding binding for configuration of the target bound by the given key in the context.

For example, `ctx.configure('controllers.MyController').to({x: 1})` will create binding `controllers.MyController:$config` with value `{x: 1}`<!-- -->.


</td></tr>
<tr><td markdown="1">

[contains(key)](./context.context.contains.md)


</td><td markdown="1">


</td><td markdown="1">

Check if a binding exists with the given key in the local context without delegating to the parent context


</td></tr>
<tr><td markdown="1">

[createView(filter, comparator, options)](./context.context.createview.md)


</td><td markdown="1">


</td><td markdown="1">

Create a view of the context chain with the given binding filter


</td></tr>
<tr><td markdown="1">

[debug(args)](./context.context.debug.md)


</td><td markdown="1">

`protected`


</td><td markdown="1">

Wrap the debug statement so that it always print out the context name as the prefix


</td></tr>
<tr><td markdown="1">

[emitError(err)](./context.context.emiterror.md)


</td><td markdown="1">


</td><td markdown="1">

Emit an `error` event


</td></tr>
<tr><td markdown="1">

[emitEvent(type, event)](./context.context.emitevent.md)


</td><td markdown="1">


</td><td markdown="1">

A strongly-typed method to emit context events


</td></tr>
<tr><td markdown="1">

[find(pattern)](./context.context.find.md)


</td><td markdown="1">


</td><td markdown="1">

Find bindings using a key pattern or filter function


</td></tr>
<tr><td markdown="1">

[findByTag(tagFilter)](./context.context.findbytag.md)


</td><td markdown="1">


</td><td markdown="1">

Find bindings using the tag filter. If the filter matches one of the binding tags, the binding is included.


</td></tr>
<tr><td markdown="1">

[findOrCreateBinding(key, policy)](./context.context.findorcreatebinding.md)


</td><td markdown="1">


</td><td markdown="1">

Find or create a binding for the given key


</td></tr>
<tr><td markdown="1">

[get(keyWithPath, session)](./context.context.get.md)


</td><td markdown="1">


</td><td markdown="1">

Get the value bound to the given key, throw an error when no value is bound for the given key.


</td></tr>
<tr><td markdown="1">

[get(keyWithPath, options)](./context.context.get_1.md)


</td><td markdown="1">


</td><td markdown="1">

Get the value bound to the given key, optionally return a (deep) property of the bound value.


</td></tr>
<tr><td markdown="1">

[getBinding(key)](./context.context.getbinding.md)


</td><td markdown="1">


</td><td markdown="1">

Look up a binding by key in the context and its ancestors. If no matching binding is found, an error will be thrown.


</td></tr>
<tr><td markdown="1">

[getBinding(key, options)](./context.context.getbinding_1.md)


</td><td markdown="1">


</td><td markdown="1">

Look up a binding by key in the context and its ancestors. If no matching binding is found and `options.optional` is not set to true, an error will be thrown.


</td></tr>
<tr><td markdown="1">

[getConfig(key, propertyPath, resolutionOptions)](./context.context.getconfig.md)


</td><td markdown="1">


</td><td markdown="1">

Resolve configuration for the binding by key


</td></tr>
<tr><td markdown="1">

[getConfigAsValueOrPromise(key, propertyPath, resolutionOptions)](./context.context.getconfigasvalueorpromise.md)


</td><td markdown="1">


</td><td markdown="1">

Get the value or promise of configuration for a given binding by key


</td></tr>
<tr><td markdown="1">

[getConfigSync(key, propertyPath, resolutionOptions)](./context.context.getconfigsync.md)


</td><td markdown="1">


</td><td markdown="1">

Resolve configuration synchronously for the binding by key


</td></tr>
<tr><td markdown="1">

[getDebugNamespace()](./context.context.getdebugnamespace.md)


</td><td markdown="1">

`protected`


</td><td markdown="1">

Get the debug namespace for the context class. Subclasses can override this method to supply its own namespace.


</td></tr>
<tr><td markdown="1">

[getOwnerContext(keyOrBinding)](./context.context.getownercontext.md)


</td><td markdown="1">


</td><td markdown="1">

Get the owning context for a binding or its key


</td></tr>
<tr><td markdown="1">

[getResolutionContext(binding)](./context.context.getresolutioncontext.md)


</td><td markdown="1">


</td><td markdown="1">

Locate the resolution context for the given binding. Only bindings in the resolution context and its ancestors are visible as dependencies to resolve the given binding


</td></tr>
<tr><td markdown="1">

[getScopedContext(scope)](./context.context.getscopedcontext.md)


</td><td markdown="1">


</td><td markdown="1">

Get the context matching the scope


</td></tr>
<tr><td markdown="1">

[getSync(keyWithPath, session)](./context.context.getsync.md)


</td><td markdown="1">


</td><td markdown="1">

Get the synchronous value bound to the given key, optionally return a (deep) property of the bound value.

This method throws an error if the bound value requires async computation (returns a promise). You should never rely on sync bindings in production code.


</td></tr>
<tr><td markdown="1">

[getSync(keyWithPath, options)](./context.context.getsync_1.md)


</td><td markdown="1">


</td><td markdown="1">

Get the synchronous value bound to the given key, optionally return a (deep) property of the bound value.

This method throws an error if the bound value requires async computation (returns a promise). You should never rely on sync bindings in production code.


</td></tr>
<tr><td markdown="1">

[inspect(options)](./context.context.inspect.md)


</td><td markdown="1">


</td><td markdown="1">

Inspect the context and dump out a JSON object representing the context hierarchy


</td></tr>
<tr><td markdown="1">

[isBound(key)](./context.context.isbound.md)


</td><td markdown="1">


</td><td markdown="1">

Check if a key is bound in the context or its ancestors


</td></tr>
<tr><td markdown="1">

[isSubscribed(observer)](./context.context.issubscribed.md)


</td><td markdown="1">


</td><td markdown="1">

Check if an observer is subscribed to this context


</td></tr>
<tr><td markdown="1">

[isVisibleTo(ctx)](./context.context.isvisibleto.md)


</td><td markdown="1">


</td><td markdown="1">

Check if this context is visible (same or ancestor) to the given one


</td></tr>
<tr><td markdown="1">

[on(eventName, listener)](./context.context.on.md)


</td><td markdown="1">


</td><td markdown="1">

The "bind" event is emitted when a new binding is added to the context. The "unbind" event is emitted when an existing binding is removed.


</td></tr>
<tr><td markdown="1">

[on(event, listener)](./context.context.on_1.md)


</td><td markdown="1">


</td><td markdown="1">


</td></tr>
<tr><td markdown="1">

[once(eventName, listener)](./context.context.once.md)


</td><td markdown="1">


</td><td markdown="1">

The "bind" event is emitted when a new binding is added to the context. The "unbind" event is emitted when an existing binding is removed.


</td></tr>
<tr><td markdown="1">

[once(event, listener)](./context.context.once_1.md)


</td><td markdown="1">


</td><td markdown="1">


</td></tr>
<tr><td markdown="1">

[setupConfigurationResolverIfNeeded()](./context.context.setupconfigurationresolverifneeded.md)


</td><td markdown="1">

`protected`


</td><td markdown="1">

Set up the configuration resolver if needed


</td></tr>
<tr><td markdown="1">

[subscribe(observer)](./context.context.subscribe.md)


</td><td markdown="1">


</td><td markdown="1">

Add a context event observer to the context


</td></tr>
<tr><td markdown="1">

[toJSON()](./context.context.tojson.md)


</td><td markdown="1">


</td><td markdown="1">

Create a plain JSON object for the context


</td></tr>
<tr><td markdown="1">

[unbind(key)](./context.context.unbind.md)


</td><td markdown="1">


</td><td markdown="1">

Unbind a binding from the context. No parent contexts will be checked.


</td></tr>
<tr><td markdown="1">

[unsubscribe(observer)](./context.context.unsubscribe.md)


</td><td markdown="1">


</td><td markdown="1">

Remove the context event observer from the context


</td></tr>
</tbody></table>


