Documents injecute 1.x · Migrating from 0.x
Skip to content

Interface: ServiceRegistry<S, A> ​

Defined in: src/types.ts:524

Read + register: what extension (module) functions and namespace() callbacks receive. It cannot add middlewares, listen to events, fork or dispose; that is the composition root's job (the DIContainer itself).

S is the services the registry was given, A the services added through it; it resolves both (S & A). Registrations grow only A, so S (usually the whole container) stays one type and lookups into it are computed once per callback, which keeps long modules cheap to typecheck.

Example ​

A module declares only what it needs

ts
const addBilling = (c: ServiceRegistry<{ db: Database }>) =>
  c.addSingleton('invoices', InvoiceRepository, ['db']);

app.extend(addBilling);

Extends ​

Type Parameters ​

S ​

S extends object = { }

A ​

A extends object = { }

Properties ​

keys ​

readonly keys: readonly ServiceKey[]

Defined in: src/types.ts:394

Keys visible from this container, including its parents'.

Inherited from ​

ServiceProvider.keys


ownKeys ​

readonly ownKeys: readonly ServiceKey[]

Defined in: src/types.ts:397

Keys registered in this container.

Inherited from ​

ServiceProvider.ownKeys

Methods ​

addAlias() ​

addAlias<K, T, R>(key, target, options?): ServiceRegistry<S, Registered<A, { [P in ServiceKey]: ResolveDependency<T, S, A> }, R>>

Defined in: src/types.ts:573

Makes key resolve to the service registered under target.

Type Parameters ​

K ​

K extends ServiceKey

T ​

T extends string | number | symbol

R ​

R extends boolean = false

Parameters ​

key ​

K

target ​

T

options? ​

AliasOptions<R>

Returns ​

ServiceRegistry<S, Registered<A, { [P in ServiceKey]: ResolveDependency<T, S, A> }, R>>


addInstance() ​

addInstance<K, T, R>(key, value, options?): ServiceRegistry<S, Registered<A, { [P in ServiceKey]: T }, R>>

Defined in: src/types.ts:562

Registers an existing value.

Type Parameters ​

K ​

K extends ServiceKey

T ​

T extends unknown

R ​

R extends boolean = false

Parameters ​

key ​

K

value ​

T

options? ​

InstanceOptions<Awaited<T>, R>

Returns ​

ServiceRegistry<S, Registered<A, { [P in ServiceKey]: T }, R>>


addSingleton() ​

addSingleton<K, F, D, R>(key, factory, dependencies?): ServiceRegistry<S, Registered<A, { [P in ServiceKey]: Produced<F> }, R>>

Defined in: src/types.ts:532

Registers a service created once and cached. factory is a function or a class; it receives the dependencies in order.

Type Parameters ​

K ​

K extends ServiceKey

F ​

F extends Factory<D, S, A, ExpectedService<K>>

D ​

D extends Dependency<S, A>[] = []

R ​

R extends boolean = false

Parameters ​

key ​

K

factory ​

F

dependencies? ​

[...D[]] | SingletonFactoryOptions<[...D[]], F, R>

Returns ​

ServiceRegistry<S, Registered<A, { [P in ServiceKey]: Produced<F> }, R>>


addTransient() ​

addTransient<K, F, D, R>(key, factory, dependencies?): ServiceRegistry<S, Registered<A, { [P in ServiceKey]: Produced<F> }, R>>

Defined in: src/types.ts:547

Registers a service created on every resolution.

Type Parameters ​

K ​

K extends ServiceKey

F ​

F extends Factory<D, S, A, ExpectedService<K>>

D ​

D extends Dependency<S, A>[] = []

R ​

R extends boolean = false

Parameters ​

key ​

K

factory ​

F

dependencies? ​

[...D[]] | RegistrationOptions<[...D[]], R>

Returns ​

ServiceRegistry<S, Registered<A, { [P in ServiceKey]: Produced<F> }, R>>


bind() ​

bind<D, R>(dependencies, factory): () => R

Defined in: src/types.ts:630

Returns a function that runs factory with resolved dependencies each time it is called.

Type Parameters ​

D ​

D extends Dependency<S, A>[]

R ​

R

Parameters ​

dependencies ​

[...D[]]

factory ​

((...args) => R) | (new (...args) => R)

Returns ​

() => R


call() ​

call<K>(key, args, thisArg?): ReturnType<Extract<ServiceType<RegistryServices<S, A>, K>, (...args) => any>>

Defined in: src/types.ts:387

Resolves a function service and calls it with args.

Type Parameters ​

K ​

K extends string | number | symbol

Parameters ​

key ​

K | TaggedKey<any, K>

args ​

Parameters<Extract<ServiceType<RegistryServices<S, A>, K>, (...args) => any>>

thisArg? ​

unknown

Returns ​

ReturnType<Extract<ServiceType<RegistryServices<S, A>, K>, (...args) => any>>

Inherited from ​

ServiceProvider.call


createResolver() ​

createResolver<K>(key): () => ServiceType<RegistryServices<S, A>, K>

Defined in: src/types.ts:382

Returns a function that resolves key when called.

Type Parameters ​

K ​

K extends string | number | symbol

Parameters ​

key ​

K | TaggedKey<any, K>

Returns ​

() => ServiceType<RegistryServices<S, A>, K>

Inherited from ​

ServiceProvider.createResolver


extend() ​

extend<EA, Req>(extension): ServiceRegistry<S, A & { [K in string | number | symbol]: EA[K] }>

Defined in: src/types.ts:610

Applies a module function that registers services.

Type Parameters ​

EA ​

EA extends object

Req ​

Req extends object = S & A

Parameters ​

extension ​

[S & A] extends [Req] ? (registry) => ServiceRegistry<any, EA> : object

Returns ​

ServiceRegistry<S, A & { [K in string | number | symbol]: EA[K] }>


get() ​

get<K, O>(key, options?): O extends object ? ServiceType<RegistryServices<S, A>, K> | undefined : ServiceType<RegistryServices<S, A>, K>

Defined in: src/types.ts:371

Resolves a service. Throws when the key is not registered, unless { optional: true } is passed.

Type Parameters ​

K ​

K extends string | number | symbol

O ​

O extends GetOptions = { }

Parameters ​

key ​

K | TaggedKey<any, K>

options? ​

O

Returns ​

O extends object ? ServiceType<RegistryServices<S, A>, K> | undefined : ServiceType<RegistryServices<S, A>, K>

Inherited from ​

ServiceProvider.get


getParent() ​

getParent(): ServiceProvider<{ }> | undefined

Defined in: src/types.ts:400

The parent container (read-only view), if any.

Returns ​

ServiceProvider<{ }> | undefined

Inherited from ​

ServiceProvider.getParent


getRegistration() ​

getRegistration(key): RegistrationInfo | undefined

Defined in: src/types.ts:403

Read-only metadata of the registration visible under key, or undefined.

Parameters ​

key ​

ServiceKey

Returns ​

RegistrationInfo | undefined

Inherited from ​

ServiceProvider.getRegistration


has() ​

has(key, options?): boolean

Defined in: src/types.ts:379

true when a service is registered under key (here or in a parent).

Parameters ​

key ​

ServiceKey

options? ​

HasOptions

Returns ​

boolean

Inherited from ​

ServiceProvider.has


injecute() ​

injecute<D, R>(factory, dependencies): R

Defined in: src/types.ts:622

Runs a function (or class) with resolved dependencies, without registering it.

Type Parameters ​

D ​

D extends Dependency<S, A>[]

R ​

R

Parameters ​

factory ​

((...args) => R) | (new (...args) => R)

dependencies ​

[...D[]]

Returns ​

R


namespace() ​

namespace<N, NA, Req>(name, extension): ServiceRegistry<S, A & { [K in string | number | symbol]: NamespacedServices<N, NA>[K] }>

Defined in: src/types.ts:590

Registers the services added by extension under name.: name.key for each of them, and name for the namespace's provider. The extension receives a fork of this container.

Type Parameters ​

N ​

N extends string

NA ​

NA extends object

Req ​

Req extends object = S & A

Parameters ​

name ​

N

extension ​

[S & A] extends [Req] ? (registry) => ServiceRegistry<any, NA> : object

Returns ​

ServiceRegistry<S, A & { [K in string | number | symbol]: NamespacedServices<N, NA>[K] }>

Released under the MIT License.