ModuleRegistry: Start() injected modules

Call Start() on injected modules, and set registry_ and handler_
properly

Test: atest --host bluetooth_test_gd
Change-Id: Id655d537982eab285549ff797a907dabb15ca64d
diff --git a/gd/module.h b/gd/module.h
index 7df6334..33e0325 100644
--- a/gd/module.h
+++ b/gd/module.h
@@ -115,23 +115,20 @@
   // Stop all running modules in reverse order of start
   void StopAll();
 
- protected:
-  Module* Get(const ModuleFactory* module) const;
+  // Helper for dependency injection in test code. DO NOT USE in prod code!
+  // Ownership of |instance| is transferred to the registry.
+  void inject_test_module(const ModuleFactory* module, Module* instance, os::Thread* thread);
 
+  // Helper for dependency injection in test code. DO NOT USE in prod code!
+  template <class T>
+  T* get_module_under_test() const {
+    return static_cast<T*>(Get(&T::Factory));
+  }
+
+ private:
+  Module* Get(const ModuleFactory* module) const;
   std::map<const ModuleFactory*, Module*> started_modules_;
   std::vector<const ModuleFactory*> start_order_;
 };
 
-class TestModuleRegistry : public ModuleRegistry {
- public:
-  void InjectTestModule(const ModuleFactory* module, Module* instance) {
-    start_order_.push_back(module);
-    started_modules_[module] = instance;
-  }
-
-  Module* GetModuleUnderTest(const ModuleFactory* module) const {
-    return Get(module);
-  }
-};
-
 }  // namespace bluetooth