服务提供器

服务提供器提供了自定义扩展和处理的入口,实现依赖于 container

每个提供器都需要实现 FastD\Container\ServiceProviderInterface 接口,实现 register 方法并处理服务提供。

如数据库服务提供器

  1. namespace FastD\ServiceProvider;
  2. use FastD\Config\ConfigLoader;
  3. use FastD\Container\Container;
  4. use FastD\Container\ServiceProviderInterface;
  5. use medoo;
  6. class DatabaseServiceProvider implements ServiceProviderInterface
  7. {
  8. protected $db;
  9. public function register(Container $container)
  10. {
  11. $config = ConfigLoader::loadPhp(app()->getAppPath() . '/config/database.php');
  12. $container->add('database', function () use ($config) {
  13. if (null === $this->db) {
  14. $this->db = new medoo($config);
  15. }
  16. return $this->db;
  17. });
  18. unset($config);
  19. }
  20. }

通过 register 方法,将服务注入到 container 容器当中,提供给全局使用,因为整个 Application 就是一个 容器。具体可查看 Application.php

最终将新增的服务提供器通过 Class::class 的方式添加到应用配置的 services 配置项即可。

整体应用都是基于 "容器" 而构成,如果你对容器的概念还不够熟悉的话,可以去参考: Pimple, PHP-DI, container

若果掌握了解更多容器相关知识,相信可以很好地使用该框架。

如果需要尝试添加或者修改服务提供器,可以参考 DatabaseServiceProvider, database.php, app.php

下一节: Swoole服务器