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 = ;var ConfigLoader = ; { this_prefix = optionsprefix; this_reqQuery = null;} ConsoleTransportprototype { console;}; ConsoleTransportprototype { this_reqQuery = reqquery;}; { this_helper = optionshelper; this_transports = optionstransports; this_prefix = optionsprefix;} Loggerprototype { this_transportsconsole;}; { return { return message + ', helper: ' + value + ', ' + text; };} var modules = App: Transport: Console: ConsoleTransport Logger: Logger Helper: Helper ; var builder = ; ; var container = builder; var req = query: 'test query';var newContainer = container; var logger = newContainer;logger;//console-prefix, test query: logger-prefix: message, helper: helper value, helper text