garrettmills
d92c8b5409
All checks were successful
continuous-integration/drone/push Build is passing
38 lines
953 B
TypeScript
38 lines
953 B
TypeScript
import {Container} from './Container'
|
|
import {TypedDependencyKey} from './types'
|
|
|
|
/**
|
|
* Base class for Injection-aware classes that automatically
|
|
* pass along their configured container to instances created
|
|
* via their `make` method.
|
|
*/
|
|
export class InjectionAware {
|
|
private ci: Container
|
|
|
|
constructor() {
|
|
this.ci = Container.getContainer()
|
|
}
|
|
|
|
/** Set the container for this instance. */
|
|
public setContainer(ci: Container): this {
|
|
this.ci = ci
|
|
return this
|
|
}
|
|
|
|
/** Get the container for this instance. */
|
|
public getContainer(): Container {
|
|
return this.ci
|
|
}
|
|
|
|
/** Instantiate a new injectable using the container. */
|
|
public make<T>(target: TypedDependencyKey<T>, ...parameters: any[]): T {
|
|
const inst = this.ci.make<T>(target, ...parameters)
|
|
|
|
if ( inst instanceof InjectionAware ) {
|
|
inst.setContainer(this.ci)
|
|
}
|
|
|
|
return inst
|
|
}
|
|
}
|