mb-injector

0.2.0 • Public • Published

mb-injector

Super-lightweight dependency injection system for JavaScript.

Allows for injection of variables from a source object into functions based on the parameter names.

Usage

(Optional) Assign Injector to mb.Injector for easier use.

window.Injector = mb.Injector;

Create a new Injector instance with any Object.

var sources = {
    name: 'My Awesome Thing',
    myFunc: function() {
        return 'do something'
    },
    config: {
        thingEnabled: true
    }
};

var injector = new Injector(sources);

Now that you have an instance with a registered source, you can start injecting variables into functions.

// Simply add the key of the variable you want
injector.inject(function(name) {
    // My app's name is: My Awesome Thing!
    console.log("My app's name is: %s!", name);
});

// Order doesn't matter, the DI is triggered by the paremeter names
injector.inject(function(config, name, myFunc) {
    // My app's name is: My Awesome Thing!
    console.log("My app's name is: %s!", name);

    // My app should do something
    console.log("My app should %s!", myFunc());

    // Is the thing enabled? Yes
    console.log("Is the thing enabled? %s", config.thingEnabled ? 'Yes' : 'No');
});

Configuration

The way that the injector finds its injected values can be customized by passing a function as the second constructor argument

var sources = {
    plugin: {
        name: 'some plugin',
        value: function() {
            return 'foobar';
        }
    }
}

var injector = new Injector(sources, function(source) {
    return source.value;
});

// Also does the same thing:
injector.extract = function(source) {
    return source.value;
}

injector.inject(function(plugin) {
    // The plugin's name is: foobar
    console.log("The plugin's value is: %s!", plugin());
});

"How do I break it?"

If you try to access a key that does not exist, the app will throw an error, rather than return undefined.

// Error: mb.Injector: 'thingThatDoesntExist' does not exist on the source object!
injector.inject(function(thingThatDoesntExist) {

});

That's it! Easy peasy, and no mess.

Contact & License Info

Author: Matthew Balmer
Twitter: @mattbalmer
Website: http://mattbalmer.com
License: MIT

Readme

Keywords

none

Package Sidebar

Install

npm i mb-injector

Weekly Downloads

0

Version

0.2.0

License

none

Last publish

Collaborators

  • mattbalmer