@solidgrounds/core
Version:
Dependency injection container
37 lines • 1.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ServiceContainerFactory = void 0;
const tslib_1 = require("tslib");
const FeatureGroupFactory_1 = require("./FeatureGroupFactory");
const Feature_1 = require("./Feature");
const Util_1 = require("./Util");
/**
* Immutable container factory.
*/
class ServiceContainerFactory {
constructor(featureGroupFactory, options = { validate: true, name: 'root' }) {
this.featureGroupFactory = featureGroupFactory;
this.options = options;
this.featureFactories = [Feature_1.KernelFeature];
}
/**
* Merge functional service factory.
*/
add(f1) {
const container = new ServiceContainerFactory(new FeatureGroupFactory_1.FeatureGroupFactory(), this.options);
container.featureFactories = [...this.featureFactories, f1];
return container;
}
build() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const featureGroup = this.featureGroupFactory.build(this.featureFactories, this.options.name);
yield featureGroup.compile();
return Util_1.serviceInstances(featureGroup.references);
});
}
}
exports.ServiceContainerFactory = ServiceContainerFactory;
ServiceContainerFactory.create = (options) => {
return new ServiceContainerFactory(new FeatureGroupFactory_1.FeatureGroupFactory(), options);
};
//# sourceMappingURL=ServiceContainerFactory.js.map