tiny-ioc

A really tiny ioc container

Usage no npm install needed!

<script type="module">
  import tinyIoc from 'https://cdn.skypack.dev/tiny-ioc';
</script>

README

tiny-ioc

A really simple and lightweight ioc container built in nodejs

Installation

$ npm install tiny-ioc

How to use tiny-ioc

Basic usage:

You register your dependency in the container with a unique name. If you use the same name twice, tiny-ioc will throw an exception.

var ioccontainer = require("tiny-ioc");

var myobject = function() { 
    this.name = "my name is ronald" 
}
ioccontainer.register("name", myobject);

var resolvedobject = ioccontainer.resolve("name");
console.log(resolvedobject.name); ==> outputs: "my name is ronald"

Nested Dependencies:

When resolving objects that have dependencies on other services, tiny-ioc will auto resolve them by default for you by mapping the name of the parameters.

var ioccontainer = require("tiny-ioc");

var logger = function() { 
    this.log = function(message) {
        console.log(message);
    } 
}
var myobject = function(logger) { 
    
    this.doSomething = function() {
        logger.log('something happened!'); 	
    }
}

ioccontainer.register("logger", logger);
ioccontainer.register("myobject", myobject);

var resolvedobject = ioccontainer.resolve("myobject");
resolvedobject.doSomething() ==> outputs: "something happened!"

Singletons:

Tiny-ioc can also register your objects as singletons.
example:

var ioccontainer = require("tiny-ioc");

var myobject = function() { 
    this.name = '';
}

ioccontainer.registerAsSingleton("myobject", myobject);

var resolvedobject = ioccontainer.resolve("myobject");
resolvedobject.name = "Ronald";

var secondResolvedObject = ioccontainer.resolve("myobject");
console.log(secondResolvedObject.name'); ==> outputs: "Ronald" 

Resolving dependencies without registration:

If you have an object that has dependencies on other services, you can always let tiny-ioc inject those for you, even if the your object is not registered in the container.

var ioccontainer = require("tiny-ioc");

var logger = function() { 
    this.log = function(message) {
        console.log(message);
    } 
}

ioccontainer.register("logger", logger);

var myobject = function(logger) { 
    
    this.doSomething = function() {
        logger.log('something happened!'); 	
    }
}



var myobjectinstance = ioccontainer.resolve(myobject);
resolvedobject.doSomething() ==> outputs: "something happened!"

General

By default tiny-ioc will try to find all nested dependencies of a resolved object and will throw an error if it cannot find one. You can bypass this behavior when registering your object.
example:

var ioccontainer = require("tiny-ioc");

var myobject = function(unknowndependency) { 
    // some inner logic	
}

ioccontainer.register("myobject", myobject, 
    { ignoreSubDependencies: true });

var myobjectinstance = ioccontainer.resolve("myobject");
==> does not throw.

Build Status