@clawject/di
Version:
<p align="center"> <a href="https://clawject.com/" target="_blank"><img src="https://clawject.com/img/logo.svg" align="center" alt="Clawject Logo" width="120" height="120" /></a> </p>
57 lines (56 loc) • 2.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ClawjectFactory = exports.ClawjectFactoryStatic = void 0;
const ClawjectContainer_1 = require("../container/ClawjectContainer");
const Utils_1 = require("../Utils");
const ClawjectApplicationContextImpl_1 = require("../ClawjectApplicationContextImpl");
const InternalScopeRegister_1 = require("../scope/InternalScopeRegister");
/**
* It's a factory class that creates a {@link ClawjectApplicationContext} instance.
*
* @docs https://clawject.com/docs/fundamentals/clawject-factory
*
* @public
* */
class ClawjectFactoryStatic {
constructor(beanProcessors, scopes) {
this.beanProcessors = beanProcessors;
this.scopes = scopes;
this.scopeRegister = new InternalScopeRegister_1.InternalScopeRegister(scopes);
}
async createApplicationContext(clawjectApplication, constructorParameters) {
const resolvedConstructorParameters = await Utils_1.Utils.getResolvedConstructorParameters(constructorParameters);
const container = new ClawjectContainer_1.ClawjectContainer(clawjectApplication, resolvedConstructorParameters, this.beanProcessors, this.scopeRegister);
await container.init();
await container.postInit();
return new ClawjectApplicationContextImpl_1.ClawjectApplicationContextImpl(container);
}
/**
* Creates new instance of {@link ClawjectFactoryStatic} with assigned {@link BeanProcessor}.
* */
withBeanProcessor(beanProcessor) {
return new ClawjectFactoryStatic([...this.beanProcessors, beanProcessor], this.scopes);
}
/**
* Creates new instance of {@link ClawjectFactoryStatic} with assigned {@link Scope}.
* */
withScope(scopeName, scope) {
return new ClawjectFactoryStatic(this.beanProcessors, new Map([...this.scopes, [scopeName, scope]]));
}
/**
* Creates new instance of {@link ClawjectFactoryStatic} with assigned scope alias.
* */
withScopeAlias(from, to) {
const instance = new ClawjectFactoryStatic(this.beanProcessors, this.scopes);
instance.scopeRegister.registerScopeAlias(from, to);
return instance;
}
}
exports.ClawjectFactoryStatic = ClawjectFactoryStatic;
ClawjectFactoryStatic.instance = new ClawjectFactoryStatic([], InternalScopeRegister_1.InternalScopeRegister.global.scopes);
/**
* Use ClawjectFactory to create an application context instance.
*
* @public
* */
exports.ClawjectFactory = ClawjectFactoryStatic.instance;