Commit b6938ab
Changed files (2)
app
infrastructure
__tests__
app/infrastructure/__tests__/registry_spec.js
@@ -27,7 +27,7 @@ describe("Registry", () => {
return new Dependent(container.resolve('item'));
});
- result = subject.resolve('dependent');
+ let result = subject.resolve('dependent');
expect(result).toBeInstanceOf(Dependent);
expect(result.item).toBeInstanceOf(Item);
});
@@ -35,8 +35,22 @@ describe("Registry", () => {
it ("can resolve a singleton", () => {
subject.register('item', () => { return new Item() }).asSingleton();
- result = subject.resolve('item')
+ let result = subject.resolve('item')
expect(result).toBe(subject.resolve('item'));
});
});
+
+ describe("#resolveAll", () => {
+ beforeEach(() => {
+ subject.register('item', () => { return "0"; });
+ subject.register('item', () => { return "1"; });
+ });
+
+ it ("resolves all instances of the given key", () => {
+ let results = subject.resolveAll('item');
+ expect(results.length).toEqual(2);
+ expect(results[0]).toEqual("0");
+ expect(results[1]).toEqual("1");
+ });
+ });
});
app/infrastructure/registry.js
@@ -22,14 +22,23 @@ class Registration {
export default class Registry {
constructor() {
- this.components = {};
+ this.registrations = {};
}
register(key, factory) {
- return this.components[key] = new Registration(key, factory)
+ if (this.registrations[key] == undefined) {
+ this.registrations[key] = [];
+ }
+ let registration = new Registration(key, factory);
+ this.registrations[key].push(registration);
+ return registration;
}
resolve(key) {
- return this.components[key].create(this);
+ return this.registrations[key][0].create(this);
+ }
+
+ resolveAll(key) {
+ return this.registrations[key].map(registration => registration.create(this));
}
}