InversifyJS
InversifyJS copied to clipboard
Explore possibility of support for setter injection
Suggested by @akosyakov in the chat:
class Foo {
@inject(Bar)
set bar(bar: Bar) {
this.bar.onChanged(() => this.update());
}
}
I understood that i can do it via onActivation, but would be nice just annotate a setter with Inject
The onActivation
comments refers to:
import { injectable, inject, Container } from "inversify";
@injectable()
class Katana {
public name = "Katana";
}
@injectable()
class Shuriken {
public name = "Shuriken";
}
@injectable()
class Ninja {
public katana: Katana;
public shuriken: Shuriken;
public constructor(
@inject("katana") katana: Katana
) {
this.katana = katana;
}
}
const container = new Container();
container.bind<Katana>("Katana").to(Katana);
container.bind<Shuriken>("Shuriken").to(Shuriken);
container.bind<Ninja>("Ninja").to(Ninja).onActivation((context, ninjaInstance) => {
// All constructor injections took place already
// we can inject some properties now
const shuriken = context.container.get<Shuriken>("Shuriken");
ninjaInstance.shuriken = shuriken;
return ninjaInstance;
});
It would be also nice to support method injections:
export class Foo {
setBar(@inject(Bar) bar: Bar) {}
activate(@inject(Bar) bar: Bar, @inject(Baz) baz: Baz) {}
}
@remojansen @akosyakov Setter injection merged.