UNPKG

fluxject

Version:

A strongly-typed dependency injection library.

37 lines (36 loc) 1.79 kB
/** * Container that manages registrations of dependencies. * @template {Record<string, Types.Registration<any, any>>} TRegistrations * All registrations that have been made on this container. */ export class Container<TRegistrations extends Record<string, Types.Registration<any, any>>> { /** * Create a new container for managing dependencies. (Alias of `fluxject()`) * @returns {Container<{}>} */ static create(): Container<{}>; /** * @protected * @param {TRegistrations} registrations */ protected constructor(); /** * Register a new set of dependencies to the container * @template {Record<string, Types.Registration<any, any>>} TNewRegistrations * The new registrations as inferred from the return type of the callback. * @param {(serviceBuilder: RegistrationBuilder) => TNewRegistrations} callback * The callback that will be used to register new services. * @returns {Container<TRegistrations & TNewRegistrations>} * A new container with the new registrations added. */ register<TNewRegistrations extends Record<string, Types.Registration<any, any>>>(callback: (serviceBuilder: RegistrationBuilder) => TNewRegistrations): Container<TRegistrations & TNewRegistrations>; /** * Prepare the container for consumption. * @returns {Types.Widen<FluxjectHostServiceProvider<TRegistrations> & Types.InferInstanceTypes<TRegistrations, "singleton"|"transient">>} */ prepare(): Types.Widen<FluxjectHostServiceProvider<TRegistrations> & Types.InferInstanceTypes<TRegistrations, "singleton" | "transient">>; #private; } import type * as Types from "./types.js"; import { RegistrationBuilder } from "./builder.js"; import { FluxjectHostServiceProvider } from "./provider.js";