node-service-locator
v0.0.2
Published
service locator for node.js apps
Downloads
238
Readme
node-service-locator
service locator for node js
Allow to load instanse of service with injected dependency of other service. Service dependencies are described in declarative way. Locator is a singletone so you can register services ones and then use it everywhere in your app
##Install
npm install node-service-locator
##Usage
Simple Services
Lets assume that we have a folder 'Services' in project and and file Logger with logger service in it.
// Services/Logger.js
exports.log = function (msg) {
console.log(msg);
};
Service description example
// services.js file
module.exports = {
"logger": {
"path": "Services/Logger"
}
}
Usage Example
var serviceList = require('./services');
var basePath = __dirname;
var locator = require('node-service-locator');
locator.init(serviceList, basePath);
//load simple object
var logger = locator.get('logger');
Servise as a constructor function
// Services/ClassLogger.js
var ClassLogger = function (errorLevel) {
this.level = errorLevel || "debug";
};
ClassLogger.prototype.log = function(message) {
console.log(this.level, message);
};
module.exports = ClassLogger;
In order to return from locator an instance of this service you should add instantiate and parameters keys to service description
"warningLogger": {
"path": "Services/ClassLogger",
"instantiate": true,
"params": ["warning"]
}
And than in you app:
var warningLogger = locator.get('warningLogger');
warningLogger.log('Alarm!');
Also you have possibility to pass one service as a parameter to anather to do this add '@' to service name in the params field
"ClassWithWarningLogger": {
"path": "Services/ClassWithWarningLogger",
"instantiate": true,
"params": ["foo", "@warningLogger", 23]
}
Also you can register some services on th fly
locator.register('foo', {name: 'foo'});
console.log(locator.get('foo').name);
// => foo
###Invoke some function with services as parameters
locator.register('foo', {name: 'foo'});
locator.invoke('foo', 'logger', function (foo, logger) {
logger.log(foo.name);
});
// => foo
##LICENSE MIT
More examples in example folder