AngularJS - 将 $factory 注入控制器

AngularJS - Inject $factory into controller

我注册了多个工厂,比如 CircleSquareTriangle,以及一个名为 ShapeController 的控制器。在 ShapeController 内部,我正在尝试使用其字符串表示形式检索其中一个工厂,就像我可以使用 $controller('ControllerName', {...}).

获取控制器一样
var ShapeController = function($scope, $routeParams, $factory) {
  var shape = $factory('Circle', []);  // shape is an instance of the Circle factory
  ....
}

我希望我可以注射 $factory 但我一直在注射 Error: [$injector:unpr] Unknown provider: $factoryProvider <- $factory <- ShapeController。有什么 api 或者我可以找回工厂的方法吗?

不对,你错了。实际上,angularjs 框架中并没有所谓的 $factory 内置 service/provider。你提到的关于 $controller 的东西,它是一个由 angularjs 创建的特殊提供程序,用于实例化具有某些本地的控制器(在那里你也可以模拟依赖项)。

因为你想获取特定依赖的实例,你可以从 injector 中提取它(这就像 DI 系统的 DI 容器),你应该在你的内部注入 $injector 依赖控制器工厂函数并使用 get 方法来检索特定的依赖项。

var ShapeController = function($scope, $routeParams, $injector) {
  var shape = $injector.get('Circle');
  ....
}