import DI from 'injectory';
const di = new DI();
di.set('Abstract', di => {
return class Abstract {
constructor(name) {
this.abstract = name;
}
}
});
di.set('Concrete', di => {
const Abstract = di.get('Abstract');
return class Concrete extends Abstract {
constructor(abstract, concrete) {
super(abstract);
this.concrete = concrete;
}
}
});
const Concrete = di.get('Concrete');
const instance = di.create('Concrete', 'a', 'b');
expect(instance.abstract).toBe('a');
expect(instance.concrete).toBe('b');
di.decorate('Concrete', Concrete => di => {
return class DecoratedConcrete extends Concrete {
constructor(abstract, concrete) {
super(abstract, concrete);
}
get() {
return this.abstract + this.concrete;
}
}
});
const decoratedInstance = di.create('Concrete', 'a', 'b');
expect(decoratedInstance.get()).toBe('ab');