import { Factory } from './Factory' import { Collection } from '../../util' import {DependencyKey, DependencyRequirement, PropertyDependency} from '../types' /** * Container factory which returns its token as its value, without attempting * to instantiate anything. This is used to register already-produced-singletons * with the container. * * @example * ```typescript * class A {} * const exactlyThisInstanceOfA = new A() * * const fact = new SingletonFactory(A, a) * * fact.produce([], []) // => exactlyThisInstanceOfA * ``` * * @extends Factory */ export default class SingletonFactory extends Factory { constructor( /** * Token identifying this singleton. */ protected token: DependencyKey, /** * The value of this singleton. */ protected value: T, ) { super(token) } produce(): T { return this.value } getDependencyKeys(): Collection { return new Collection() } getInjectedProperties(): Collection { return new Collection() } }