基于服务容器的扩展

最后更新于:2022-04-01 15:07:09

几乎每个 Laravel 框架引入的服务提供者都会绑定对象到服务容器中。你可以在 config/app.php 配置文件中找到应用程序的服务提供者清单。如果你有时间,你应该浏览过这里面每一个提供者的源代码。通过这样做,你将会更了解每一个提供者添加什么到框架,以及用什么键值来绑定各种服务到服务容器。 例如, HashServiceProvider 绑定 hash 做为键值到服务容器,它将解析成 Illuminate\Hashing\BcryptHasher 实例。你可以在应用程序中覆写这个 IoC 绑定,轻松地扩展并覆写这个类。例如: ~~~ <?php namespace App\Providers; class SnappyHashProvider extends \Illuminate\Hashing\HashServiceProvider { public function boot() { parent::boot(); $this->app->bindShared('hash', function() { return new \Snappy\Hashing\ScryptHasher; }); } } ~~~ 要注意的是这个类扩展 HashServiceProvider,不是默认的 ServiceProvider 基础类。当你扩展了服务提供者,在 config/app.php 配置文件把 HashServiceProvider 换成你扩展的提供者名称。 这是被绑定在容器的所有核心类的一般扩展方法。实际上,每个以这种方式绑定在容器的核心类都可以被覆写。再次强调,看过每个框架引入的服务提供者将会使你熟悉:每个类被绑在容器的哪里、它们是用什么键值绑定。这是个好方法可以了解更多关于 Laravel 如何结合它们。
';