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
- Project was completely rewrite to Typescript.
resolveno longer returns Promise.- added method
getas alias toresolve.
$ npm install node-injectable --save
Let’s take a look to the recommended usage and APIs of Injectable:
/**
* @injectable(foo)
*/
module.exports.createFoo = function() {
return "foo"
}
/**
* @injectable(bar)
*/
module.exports.createBar = function(foo) {
return foo + "bar"
}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
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.
Your module will be registered as bar and have 2 dependencies dep1 and dep2 .
/**
* @injectable(logger)
*/
module.exports = function(dep1, dep2) {}You can specify name of services to inject.
/**
* @injectable(bar)
* @param foo @inject(logger)
* @param bar @inject(request)
*/
module.exports = function(foo, bar) {}/**
* @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() {
}
}class Foo {
/**
* @injectable(foo)
*/
constructor() {
}
}
module.exports = Fooclass Foo {
/**
* @injectable(foo)
*/
constructor() {
}
}
module.exports.Foo = Foo/**
* @injectable(foo)
*/
exports.createFoo = function() {
}
/**
* @injectable(bar)
*/
exports.createBar = async function() {
}
/**
* @injectable(default)
*/
function default_1() {
}
exports.default = default_1class Foo {
/**
* @injectable(foo)
*/
constructor() {
}
}
exports.Foo = FooWhen 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
MIT © Dusan Kmet