import { Injection } from "./injection"; export interface Factory { create?(...args: any[]): T; instance?: T; } export interface Initializer { name: string; initialize: (T, ...args: any[]) => void; } export interface Destructor { name: string; teardown: (T, ...args: any[]) => void; } /////////////////////////////////////////////////////////////////////////////// export interface FactoryResolver { factoryFor(specifier: Specifier): Factory; constructorArgumentsFor(specifier: Specifier): Injection[]; destructorsFor(specifier: Specifier): Destructor[]; destructorArgumentsFor(specifier: Specifier, name: string): Injection[]; initializersFor(specifier: Specifier): Initializer[]; initializerArgumentsFor(specifier: Specifier, name: string): Injection[]; }