Laravel 5:如何通过自定义类的构造函数获得自动DI?

时间:2014-11-28 00:41:56

标签: php dependency-injection ioc-container laravel-5

Laravel文档指出:"你可能只是"类型提示"由容器解析的类的构造函数中的依赖项,包括控制器,事件侦听器......"

这里的关键词是"一个由容器解析的类" - 我一直在尝试使用我自己的自定义类(服务,存储库,处理程序等)重现这一点,我无法弄明白。控制器(和其他类)通过容器解析,该容器处理任何依赖项的自动注入。见https://github.com/laravel/framework/blob/master/src/Illuminate/Routing/ControllerDispatcher.php#L53

我的问题是如何使用自己的类结构实现相同的功能。它并不像将类绑定到IoC并通过getter解析它们那么简单。我想知道是否有人可能会在他们的应用程序中设置这样的东西,并愿意分享他们的技术:)

非常感谢!

1 个答案:

答案 0 :(得分:0)

容器解析对象图表。所以你需要让你的课程在图表上。

如果控制器由Laravel的容器处理,那么你去:在你的控制器中注入你的服务,Laravel会为你处理它。

通过“为你处理”我的意思是它会创造&注入控制器的依赖关系,以及依赖关系的依赖关系,以及......这是传递性的。

例如:

  • UserController中
    • UserService
      • UserRepository(或其他任何类)

所以问题是:你想在哪里注射你的课程?

    控制器中的
  • :Laravel将处理
  • 在另一个对象中:转到“你想在哪里注入你的课程?”
  • 在不是控制器的“根”对象中(例如测试类,Command类,...):在这里,您将需要Laravel来创建对象。这可能很简单,我不太了解Laravel ......