petergaal / IocContainer

Simple IOC container in JavaScript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

IocContainer

IocContainer is a simple dependency injection container in Javascript.

Usage

Simple dependency

class A {
  dependencies = ["b"];
}

class B {
}

// create container instance
const container = new IocContainer();

// register classes
container.register("a", A);
container.register("b", B);
container.initialize();

// initialize all classes
container.initialize();

const instanceA = container.getInstance("a");
const instanceB = container.getInstance("b");

// After initialisation: instanceA.b == instanceB

Singleton Objects

All objects created by container are singletons by default. It can be changed but this is not well tested in complicated scenarios.

class A {
}

container.register("a", A);

const instanceA1 = container.getInstance("a");
const instanceB2 = container.getInstance("a");
// After initialisation: instanceA1 === instanceA2

Classes with arguments in constructor

Passing arguments are supported in register call as an optional parameters:

class A {
  constructor(hello, world) {
    this.hello = hello;
    this.world = world;
  }
}

const container = new IocContainer();
container.register("a", A, "Hello", "world");
container.initialize();

const instanceA = container.getInstance("a");

// After initialisation:
//   instanceA.hello = "Hello"
//   instanceA.world = "world"

Circular Dependency

There is a support for circular dependency, that's why I chose to not inject the dependency using constructor.

class A {
  dependencies = ["b"];
}

class B {
  dependencies = ["a"];
}

const container = new IocContainer2();
container.register("a", A);
container.register("b", B);
container.initialize();

const instanceA = container.getInstance("a");
const instanceB = container.getInstance("b");

// After initialisation:
//   instanceA.b == instanceB
//   instanceB.a == instanceA

About

Simple IOC container in JavaScript


Languages

Language:JavaScript 100.0%