在app\Contracts(自己创建)下创建TestContract.php
namespace App\Contracts; interface TestContract { public function callMe($controller); }
在app\Services下创建TestService.php
namespace App\Services; use App\Contracts\TestContract; class TestService implements TestContract { public function callMe($controller) { dd('Call Me From TestServiceProvider In '.$controller); } }
3.在app\Providers下创建TestServiceProvider.php
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Services\TestService; class TestServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void * @author LaravelAcademy.org */ public function register() { //使用singleton绑定单例 $this->app->singleton('test',function(){ return new TestService(); }); //使用bind绑定实例到接口以便依赖注入 $this->app->bind('App\Contracts\TestContract',function(){ return new TestService(); }); } }
4.在config/app.php的providers数组中追加
App\Providers\TestServiceProvider::class,
5.创建TestController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use App; use App\Contracts\TestContract; class TestController extends Controller { //依赖注入 public function __construct(TestContract $test){ $this->test = $test; } /** * Display a listing of the resource. * * @return Response * @author LaravelAcademy.org */ public function index() { // $test = App::make('test'); // $test->callMe('TestController'); $this->test->callMe('TestController'); } //其他控制器动作 }
6.输出
"Call Me From TestServiceProvider In TestController"