-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontainer.js
59 lines (54 loc) · 1.59 KB
/
container.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
'use strict';
const _ = require('lodash');
const getenv = require('getenv');
const dotenv = require('dotenv');
const awilix = require('awilix');
const application = require('./lib/application');
const grayscaleProcessor = require('./lib/grayscale-processor');
const logger = require('./loggers/logger');
const mongo = require('./datasources/mongo');
const container = awilix.createContainer();
dotenv.load();
module.exports = container;
let opts = {
formatName: 'camelCase',
registrationOptions: {
lifetime: awilix.Lifetime.SCOPED
}
};
container
.loadModules([
'controllers/*.js',
'datasources/mongo/repositories/*.js',
'interface/http/routes/*.js'
], opts);
container
.registerClass({
application: [application, { lifetime: awilix.Lifetime.SINGLETON }],
grayscaleProcessor: [grayscaleProcessor, { lifetime: awilix.Lifetime.SINGLETON }]
})
.registerFunction({
logger: [logger, { lifetime: awilix.Lifetime.SINGLETON }],
database: [mongo, { lifetime: awilix.Lifetime.SINGLETON }]
})
.loadModules(
['datasources/mongo/models/*.js'], {
formatName: 'camelCase',
registrationOptions: {
lifetime: awilix.Lifetime.TRANSIENT
}
})
// TODO: need abstract storages, config classes
.registerValue({
configs: getenv
});
// container
// .registerClass({
// app: [Application, { lifetime: awilix.Lifetime.SINGLETON }],
// server: [Server, { lifetime: awilix.Lifetime.SINGLETON }]
// })
// .registerFunction({
// router: [router, { lifetime: awilix.Lifetime.SINGLETON }],
// logger: [logger, { lifetime: awilix.Lifetime.SINGLETON }]
// })
// .registerValue({ config });