3.2.0 • Published 5 years ago
node-injectable v3.2.0
node-injectable
A simple library for dependency injection with support for ES6 generators. For more information about this pattern look at: Dependency injection and Inversion of control.
- supports ES6 classes
- supports async functions
- working with Typescript
Migration from v2
- Project was completely rewrite to Typescript.
resolveno longer returns Promise.- added method
getas alias toresolve.
Install
$ npm install node-injectable --saveUsage
Let’s take a look to the recommended usage and APIs of Injectable:
Step1: Declare factories with some dependencies
/**
* @injectable(foo)
*/
module.exports.createFoo = function() {
return "foo"
}
/**
* @injectable(bar)
*/
module.exports.createBar = function(foo) {
return foo + "bar"
}Step2: Create a Container a tell him where are your dependencies
import { Container } from "node-injectable"
const container = new Container()
container.lookup(['src/**/*.js']).then(() => {
container.get('foo') // "foo"
container.get('bar') // "foobar"
})lookupscan files you want and automatically register all serviceslookupcan found only exported services
Annotations
There is several ways how to annotate modules, functions and classes. In general if you want to register module, function or class automatically by annotations you must provide @injectable(NAME) in comment.
Resolve by parameter
Your module will be registered as bar and have 2 dependencies dep1 and dep2 .
/**
* @injectable(logger)
*/
module.exports = function(dep1, dep2) {}Resolve by name
You can specify name of services to inject.
/**
* @injectable(bar)
* @param foo @inject(logger)
* @param bar @inject(request)
*/
module.exports = function(foo, bar) {}Annotations examples
module.exports functions
/**
* @injectable(foo)
*/
module.exports.createFoo = function() {
}
/**
* @injectable(bar)
*/
module.exports.createBar = async function() {
}/**
* @injectable(foo)
*/
module.exports = function() {
}module.exports = {
/**
* @injectable(foo)
*/
createFoo: function() {
},
/**
* @injectable(bar)
*/
createBar: async function() {
}
}module.exports classes
class Foo {
/**
* @injectable(foo)
*/
constructor() {
}
}
module.exports = Fooclass Foo {
/**
* @injectable(foo)
*/
constructor() {
}
}
module.exports.Foo = Fooexports functions (ES6)
/**
* @injectable(foo)
*/
exports.createFoo = function() {
}
/**
* @injectable(bar)
*/
exports.createBar = async function() {
}
/**
* @injectable(default)
*/
function default_1() {
}
exports.default = default_1exports classes (ES6)
class Foo {
/**
* @injectable(foo)
*/
constructor() {
}
}
exports.Foo = FooContributing
When submitting your pull-request try to follow those guides:
- https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github
- https://medium.com/@vadimdemedes/making-your-first-contribution-de6576ddb190
Licence
MIT © Dusan Kmet