Commit b6938ab

mo khan <mo@mokhan.ca>
2016-12-06 04:39:20
implement resolveAll.
1 parent 9923fad
Changed files (2)
app
infrastructure
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));
   }
 }