@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>
43 lines (42 loc) • 2.17 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ClawjectContainer = void 0;
const ApplicationBeanFactory_1 = require("./ApplicationBeanFactory");
const ApplicationConfigurationFactory_1 = require("./ApplicationConfigurationFactory");
const MetadataStorage_1 = require("../MetadataStorage");
const RuntimeErrors_1 = require("../api/RuntimeErrors");
const ScopeManager_1 = require("./ScopeManager");
class ClawjectContainer {
constructor(applicationClass, applicationClassConstructorParameters, beanProcessors, scopeRegister) {
this.applicationClass = applicationClass;
this.applicationClassConstructorParameters = applicationClassConstructorParameters;
this.beanProcessors = beanProcessors;
this.scopeRegister = scopeRegister;
this.applicationConfigurationFactory = new ApplicationConfigurationFactory_1.ApplicationConfigurationFactory();
this.applicationBeanFactory = new ApplicationBeanFactory_1.ApplicationBeanFactory(this.applicationConfigurationFactory, this.beanProcessors, this.scopeRegister);
this.scopeManager = new ScopeManager_1.ScopeManager(this.applicationBeanFactory);
}
async init() {
const applicationMetadata = MetadataStorage_1.MetadataStorage.getApplicationMetadata(this.applicationClass);
if (applicationMetadata === null) {
throw new RuntimeErrors_1.RuntimeErrors.NoClassMetadataFoundError('No application metadata found');
}
await this.applicationConfigurationFactory.init(this.applicationClass, this.applicationClassConstructorParameters);
await this.applicationBeanFactory.init(applicationMetadata);
this.scopeManager.init();
}
async postInit() {
await this.applicationBeanFactory.postInit();
}
async destroy() {
await this.applicationBeanFactory.destroy();
this.scopeManager.destroy();
}
getExposedBean(beanName) {
return this.applicationBeanFactory.getExposedBean(beanName);
}
getExposedBeans() {
return this.applicationBeanFactory.getExposedBeans();
}
}
exports.ClawjectContainer = ClawjectContainer;