1.1.16 • Published 9 years ago
micro-di v1.1.16
Micro DI
Config-based dependency injection container for node.js, inspired by Symfony2 (PHP) and Spring (Java).
Features
- based on hyper-config: config wrapper with merging, references, string macros, tagging, etc.
- supports annotation
- injects to constructor as options object or arguments
- can clone di container with new context (container per requests)
Config keywords
- @class - reference to class, container creates new instance of prototype
- @factory - reference to factory function, which returns initialized object, container invoke this function and cache result
- ~path - reference, see hyper-config
- @inject - constructor injection type: object, arguments, props
- @tags - array of tags, see hyper-config
Usage
# ./config/ex2.all.yml
app:
console-transport:
@class: ~App.Transport.Console
@tags: [req]
prefix: console-prefix
logger:
@class: ~App.Logger
@scope: req
helper:
@factory: ~App.Helper
@inject: arguments
text: helper text
value: helper value
transports:
console: ~app.console-transport
prefix: logger-prefix
var MicroDi = require('micro-di');
var ConfigLoader = require('node-config-loader');
function ConsoleTransport(options) {
this._prefix = options.prefix;
this._reqQuery = null;
}
ConsoleTransport.prototype.write = function (message) {
console.log(this._prefix + ', ' + this._reqQuery + ': ' + message);
};
ConsoleTransport.prototype.setReq = function (req) {
this._reqQuery = req.query;
};
function Logger(options) {
this._helper = options.helper;
this._transports = options.transports;
this._prefix = options.prefix;
}
Logger.prototype.log = function (message) {
this._transports.console.write(this._helper(this._prefix + ': ' + message));
};
function Helper(value, text) {
return function (message) {
return message + ', helper: ' + value + ', ' + text;
};
}
var modules = {
App: {
Transport: {
Console: ConsoleTransport
},
Logger: Logger,
Helper: Helper
}
};
var builder = MicroDi()
.addConfig(modules);
ConfigLoader({env: 'dev'})
.addConfigPath(__dirname + '/config')
.load(function (config) {
builder.addConfig(config);
});
var container = builder.getContainer();
var req = {
query: 'test query'
};
var newContainer = container.setContext('req', {
req: req
});
var logger = newContainer.get('app.logger');
logger.log('message');
//console-prefix, test query: logger-prefix: message, helper: helper value, helper text
1.1.16
9 years ago
1.1.15
9 years ago
1.1.14
9 years ago
1.1.13
9 years ago
1.1.12
9 years ago
1.1.10
10 years ago
1.1.9
10 years ago
1.1.8
10 years ago
1.1.7
10 years ago
1.1.6
10 years ago
1.1.5
10 years ago
1.1.4
10 years ago
1.1.3
10 years ago
1.1.2
10 years ago
1.1.1
10 years ago
1.1.0
10 years ago
1.0.27
10 years ago
1.0.26
10 years ago
1.0.25
10 years ago
1.0.24
10 years ago
1.0.23
10 years ago
1.0.21
10 years ago
1.0.20
10 years ago
1.0.19
10 years ago
1.0.17
10 years ago
1.0.16
10 years ago
1.0.15
10 years ago
1.0.14
10 years ago
1.0.13
10 years ago
1.0.12
10 years ago
1.0.11
10 years ago
1.0.10
10 years ago
1.0.9
10 years ago
1.0.8
10 years ago
1.0.7
10 years ago
1.0.5
10 years ago
1.0.4
10 years ago
1.0.3
10 years ago
1.0.2
10 years ago
1.0.1
10 years ago
1.0.0
10 years ago