php - How does Laravel defer multiple bindings all listed in a single service provider? -


i want repositories listed in single service provider, don't want them loaded @ once...

consider service provider below:

class repositoryserviceprovider extends serviceprovider {      protected $defer = true;      public function register()     {         $this->app->bind(             'app\repositories\contracts\foorepository',             'app\repositories\sql\foosqlrepository');          $this->app->bind(             'app\repositories\contracts\barrepository',             'app\repositories\sql\barsqlrepository');          // , more added later...     }      public function provides()     {          // defer , load these @ once? or one(s) needed?         return ['app\repositories\contracts\foorepository',                 'app\repositories\contracts\barrepository'];     }  } 

according laravel docs, can defer registration of bindings until needed. work when i've added multiple bindings in single service provider? mean, defer , load all or load only 1 needed?

laravel register bindings, if 1 needed. deferred feature works pretty simple. first, map of entries in provides() , actual provider created:

illuminate\foundation\providerrepository@compilemanifest

if ($instance->isdeferred()) {     foreach ($instance->provides() $service)     {         $manifest['deferred'][$service] = $provider;     }     $manifest['when'][$provider] = $instance->when(); } 

then when make() called in illuminate\foundation\application...

if (isset($this->deferredservices[$abstract])) {     $this->loaddeferredprovider($abstract); } 

...and binding matches 1 of deferred provider end here:

illuminate\foundation\application@registerdeferredprovider

$this->register($instance = new $provider($this));  if ( ! $this->booted) {     $this->booting(function() use ($instance)     {         $this->bootprovider($instance);     }); } 

as might able tell, provider registered usual means register() , boot() called. if think it, it's not possible load 1 binding service provider , not include other ones, because it's done in 1 method.


Comments

Popular posts from this blog

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

python - Mongodb How to add addtional information when aggregating? -

java - Incorrect order of records in M-M relationship in hibernate -