TypedIOC
TypedIOC is the IOC Container for Typescript
Installation
npm install typedioc --save
Basic usage
Add experimentalDecorators": true and "emitDecoratorMetadata": true to your compilerOptions
import {Container, Lifetime,resolvable} from "typedioc";
@resolvable()
class Car{
public engine: Engine;
constructor(engine: Engine){
this.engine=engine;
}
}
var container: Container = new Container();
var car: Car = container.resolve<Car>(Car);
Register types
import {Container, Lifetime,resolvable} from "typedioc";
@resolvable()
class Vehicle{
public serialNumber: number;
constructor(){
this.serialNumber=Math.random();
}
}
@resolvable()
class Car extends Vehicle{
public engine: Engine;
constructor(engine: Engine){
super();
this.engine=engine;
}
}
//Option 1: Singleton, each resolved Vehicle will point to the same instance
var container: Container = new Container();
container.registerType(Vehicle,Car,Lifetime.Singleton);
var vehicle1: Vehicle = container.resolve<Vehicle>(Vehicle);//vehicle1 is a instance of Car
var vehicle2: Vehicle = container.resolve<Vehicle>(Vehicle);
//vehicle1.serialNumber == vehicle2.serialNumber
//Option 2: transient, each resolved Vehicle will be a new instance
var container2: Container = new Container();
container2.registerType(Vehicle,Car,Lifetime.Transient);
var vehicle3: Vehicle = container2.resolve<Vehicle>(Vehicle);
var vehicle4: Vehicle = container2.resolve<Vehicle>(Vehicle);
//vehicle3.serialNumber != vehicle4.serialNumber
Register instances
import {Container, Lifetime,resolvable} from "typedioc";
@resolvable()
class Vehicle{
public serialNumber: number;
constructor(){
this.serialNumber=Math.random();
}
}
@resolvable()
class Car extends Vehicle{
public engine: Engine;
constructor(engine: Engine){
super();
this.engine=engine;
}
}
var container: Container = new Container();
var carInstance: Car = new Car();
carInstance.serialNumber=1234;
container.registerInstance(Vehicle,carInstance);
var resolvedVehicle: Vehicle = container.resolve<Vehicle>(Vehicle);