@leisurelink/service-inject
v0.1.1
Published
A service-injection utility for nodejs; reduces the need for boostrap coordination among modules.
Downloads
5
Keywords
Readme
service-inject
A service-injection utility for nodejs; reduces the need for boostrap coordination among modules.
What
service-inject
exports a single class, Injector
.
Injector
can be thought of as an inversion of control container. It enables modules to contribute well-known services and to register callbacks that will be invoked by the injector as-soon-as the callback's dependencies can be injected.
Basics
Consuming
var format = require('util').format;
var injector = require('service-inject')
// Name the dependencies
// here => v v v
injector.when(['LoginUtil', 'Logger', 'nameFormatter'],
// They will be injected
// here => v v v
function (logins, logger, formatter) {
function recordLogin(user) {
logger.info(format('User logged in: %s', formatter(user)))
}
logins.on('user-login', recordLogin);
})
Contributing
var injector = reqiure('service-inject')
function nameFormatter(party) {
var res;
if (!party) {
return '-nobody-'
}
// If the party has a 'name' property, use that; probably an entity of some sort.
if (party.name) {
return party.name
}
// if the party looks like a person, format name as last, first, middle
if (party.lastName) {
res = party.lastName
if (party.firstName) {
res = res.concat(', ', party.firstName)
if (party.middleNames) {
res = res.concat(', ', party.middleNames)
}
}
return res
}
return '-un-named-'
}
injector.set('nameFormatter', nameFormatter)
Well-known Names
The services you choose to inject are referenced by well-known name. These names are agreed upon by your application and have no meaning elsewhere. The values you supply to the injector are opaque; it doesn't know or care about their meanings.
Injector Class
get
- gets a registered service by name.set
- sets a registered service by name.has
- determines if there is a registered service by the specified name.when
- specifies a list of services and a callback to invoke when all of the specified services can be fulfilled.capture
- specifies a list of services to be captured for later use.inject
- specifies a list of services to be injected immediately into a specified callback.listUnfulfilled
- returns a list of services that have not been registered, but for which there are registered callbacks.