import { DIKey } from '../../distage/model/DIKey.js'; import { BindingTags } from '../../distage/model/Activation.js'; import { Functoid } from '../../distage/core/Functoid.js'; /** * Base interface for all binding types */ export interface Binding { readonly key: DIKey; readonly tags: BindingTags; readonly kind: BindingKind; } /** * Types of bindings supported by distage */ export declare enum BindingKind { Instance = "Instance", Class = "Class", Factory = "Factory", Alias = "Alias", Set = "Set", WeakSet = "WeakSet", AssistedFactory = "AssistedFactory" } /** * Binding that provides a pre-existing instance */ export interface InstanceBinding extends Binding { kind: BindingKind.Instance; instance: T; } /** * Binding that instantiates a class using its constructor */ export interface ClassBinding extends Binding { kind: BindingKind.Class; factory: Functoid; } /** * Binding that uses a factory function (Functoid) to create instances */ export interface FactoryBinding extends Binding { kind: BindingKind.Factory; factory: Functoid; } /** * Binding that creates an alias to another key */ export interface AliasBinding extends Binding { kind: BindingKind.Alias; target: DIKey; } /** * Binding that contributes an element to a set */ export interface SetBinding extends Binding> { kind: BindingKind.Set; elementKey: DIKey; element: ClassBinding | InstanceBinding | FactoryBinding; weak: boolean; } /** * Binding that contributes a weak element to a set. * Weak elements are only included if their dependencies are satisfied. */ export interface WeakSetBinding extends Binding> { kind: BindingKind.WeakSet; elementKey: DIKey; element: ClassBinding | InstanceBinding | FactoryBinding; } /** * Binding for assisted injection (factory bindings). * These allow creating multiple instances with runtime parameters * combined with DI-managed dependencies. */ export interface AssistedFactoryBinding extends Binding { kind: BindingKind.AssistedFactory; factory: Functoid; assistedParams: string[]; } /** * Union type of all binding types */ export type AnyBinding = InstanceBinding | ClassBinding | FactoryBinding | AliasBinding | SetBinding | WeakSetBinding | AssistedFactoryBinding; /** * Helper functions to create bindings */ export declare const Bindings: { instance(key: DIKey, instance: T, tags?: BindingTags): InstanceBinding; class(key: DIKey, implementation: new (...args: any[]) => T, tags?: BindingTags): ClassBinding; factory(key: DIKey, factory: Functoid, tags?: BindingTags): FactoryBinding; alias(key: DIKey, target: DIKey, tags?: BindingTags): AliasBinding; set(setKey: DIKey>, elementKey: DIKey, element: ClassBinding | InstanceBinding | FactoryBinding, weak?: boolean, tags?: BindingTags): SetBinding; weakSet(setKey: DIKey>, elementKey: DIKey, element: ClassBinding | InstanceBinding | FactoryBinding, tags?: BindingTags): WeakSetBinding; assistedFactory(key: DIKey, factory: Functoid, assistedParams?: string[], tags?: BindingTags): AssistedFactoryBinding; }; //# sourceMappingURL=Binding.d.ts.map