How to upgrade from 4.x to 5.x
- the 4.x
guid(): stringmethod has been replaced byid(): number - the property
guid: stringhas been replaced byid: numberin the following interfaces and their implementations thub.com/inversify/InversifyJS/blob/master/src/contain* Binding
How to upgrade from 2.x to 3.x
The 2.x
Kernelis namedContainerin 3.xThe 2.x
KernelmethodgetServiceIdentifierAsStringis not a method ofContainerin 3.x.The 2.x
PlanAndResolveArgsinterface is namedNextArgsin 3.0 and some of its properties have changed.The
Providersignature has been modified.In 3.x,
strictNullChecksis enabled.The resolution logic in 2.0 and 3.0 is slightly different in order to support new features like optional dependencies and defaults contextual injections.
How to upgrade from 1.x to 2.x
Version 2.x introduces some changes in the API.
Naming changes
The 1.x TypeBinding is named Binding in 2.x
The 1.x BindingScopeEnum is named BindingScope in 2.x
Fluent binding syntax
The 1.x binding syntax looks as follows:
container.bind(new TypeBinding<FooInterface>("FooInterface", Foo, BindingScopeEnum.Transient));
The 2.x binding syntax looks as follows:
container.bind<FooInterface>("FooInterface").to(Foo).inTransientScope()
Resolution syntax
The 1.x container.resolve<T>(identifier: string) method is now container.get<T>(identifier: string) 2.x.
The 1.x resolution syntax looks as follows:
var foobar = container.resolve<FooBarInterface>("FooBarInterface");
The 2.x resolution syntax looks as follows:
var foobar = container.get<FooBarInterface>("FooBarInterface");
@injectable & @inject
All your classes must be decorated with the @injectable() decorator. If your class has a dependency in a class that's enough:
@injectable()
class Katana {
public hit() {
return "cut!";
}
}
@injectable()
class Shuriken {
public throw() {
return "hit!";
}
}
@injectable()
class Ninja implements Ninja {
private _katana: Katana;
private _shuriken: Shuriken;
public constructor(
katana: Katana,
shuriken: Shuriken
) {
this._katana = katana;
this._shuriken = shuriken;
}
public fight() { return this._katana.hit(); };
public sneak() { return this._shuriken.throw(); };
}
But if your class has a dependency on an interface you will also need to use the @inject decorator.
@injectable()
class Ninja implements Ninja {
private _katana: Katana;
private _shuriken: Shuriken;
public constructor(
@inject("Katana") katana: Katana,
@inject("Shuriken") shuriken: Shuriken
) {
this._katana = katana;
this._shuriken = shuriken;
}
public fight() { return this._katana.hit(); };
public sneak() { return this._shuriken.throw(); };
}