fluxject
Version:
A strongly-typed dependency injection library.
37 lines (36 loc) • 1.79 kB
TypeScript
/**
* 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";