Init container

This commit is contained in:
Alexandre Bodin 2021-08-05 12:24:48 +02:00
parent 71aba0001b
commit 5a276e2b46
2 changed files with 48 additions and 0 deletions

View File

@ -8,6 +8,7 @@ const { Database } = require('@strapi/database');
const loadConfiguration = require('./core/app-configuration');
const { createHTTPServer } = require('./server');
const { createContainer } = require('./container');
const loadModules = require('./core/load-modules');
const utils = require('./utils');
const bootstrap = require('./core/bootstrap');
@ -32,6 +33,8 @@ const LIFECYCLES = {
class Strapi {
constructor(opts = {}) {
this.container = createContainer(this);
this.dir = opts.dir || process.cwd();
this.config = loadConfiguration(this.dir, opts);

View File

@ -0,0 +1,45 @@
'use strict';
const createContainer = strapi => {
const registerd = new Map();
const resolved = new Map();
return {
register(name, resolver) {
if (registerd.has(name)) {
throw new Error(`Cannot register already registered service ${name}`);
}
registerd.set(name, resolver);
return this;
},
get(name, args) {
// TODO: handle singleton vs reinstanciation everytime
if (resolved.has(name)) {
return resolved.get(name);
}
if (registerd.has(name)) {
const resolver = registerd.get(name);
if (typeof resolver === 'function') {
resolved.set(name, resolver({ strapi }, args));
} else {
resolved.set(name, resolver);
}
return resolved.get(name);
}
throw new Error(`Could not resovle service ${name}`);
},
// TODO: implement
extend() {},
};
};
module.exports = {
createContainer,
};