Laravel内核实例化$kernel=$app->make(Illuminate\Contracts\Http\Kernel::class);instantiation内核在实例化应用的时候已经初始化了很多基础操作,所以下面的构造方法会直接使用服务容器的依赖注入来解决类之间的依赖关系。//\Illuminate\Contracts\Http\Kernel类的构造函数依赖于\Illuminate\Contracts\Foundation\Application和\Illuminate\Routing\Router,会通过服务容器公共函数处理依赖__construct(Application$app,Router$router){$this->app=$app;//主要委??托$router处理$this->router=$router;//下面是中间件设置$router->middlewarePriority=$this->middlewarePriority;foreach($this->middlewareGroupsas$key=>$middleware){$router->middlewareGroup($key,$middleware);}foreach($this->routeMiddlewareas$key=>$middleware){$router->aliasMiddleware($key,$middleware);}}\Illuminate\Contracts\Foundation\Application处理:make时直接通过别名调用$this->instances['app']\Illuminate\Routing\Router处理:make时别名方法直接调用Router对应的匿名函数在$this->bindings['router']数组中具体化。它依赖于\Illuminate\Contracts\Events\Dispatcher和\Illuminate\Container\Container公共函数__construct(Dispatcher$events,Container$container=null){$this->events=$events;$this->routes=newRouteCollection;$this->container=$container?:newContainer;}\Illuminate\Contracts\Events\Dispatcher处理:make时通过别名的方式直接调用$this->bindings['events'中具体对应的匿名函数Dispatcher]array依赖\Illuminate\Contracts\Container\Containerpublicfunction__construct(ContainerContract$container=null){$this->container=$container?:newContainer;}\Illuminate\Container\Container处理:make$this时直接调用->instances['Illuminate\Container\Container']=Object(app)\Illuminate\Contracts\Container\Container处理:make期间调用别名直接调用$this->instances['app']=Object(app)的上面两个是一样的,没有区别注意:上面列出的依赖是直接委托给服务容器自动处理的,不用怕$this->bindings['router']和$this-的处理>bindings['events']绑定事件,make会直接调用匿名函数具体对应数组键make期间使用的代码片段#################################################if($concreteinstanceofClosure){return$concrete($this,end($this->with));}}################################################$this->bindings['router']=['concrete'=>function($app){returnnewRouter($app['events'],$app);},'shared'=>'true',];$router=newRouter($app['events'],$app);\Illuminate\Routing\Routerpublic函数__construct(Dispatcher$events,Container$container=null){$this->events=$events;$this->routes=newRouteCollection;$this->container=$container?:newContainer;}返回一个Router对象,同时$this->instances['router']=$router对象会被重置,以供下次直接调用。$this->bindings['events']=['concrete'=>function($app){return(newDispatcher($app))->setQueueResolver(function()use($app){return$app->制作(QueueFactoryContract::class);});}'共享'=>'真',];$dispatcher=(new\Illuminate\Events\Dispatcher($app))->setQueueResolver(function()use($app){return$app->make(QueueFactoryContract::class);});Illuminate\Events\Dispatcher:publicfunction__construct(ContainerContract$container=null){$this->container=$container?:newContainer;}publicfunctionsetQueueResolver(callable$resolver){$this->queueResolver=$resolver;return$this;}返回一个Dispatcher对象,下次直接调用时会重置$this->instances['events']=$dispatcher对象。注意:内核对象是一个集成了应用和路由的对象,路由注入了IlluminateEventsDispatcher对象,是核心对象。
