mardi 6 octobre 2015

Injecting an instance bound to the service container

I have a service provider that I want to use to bind an instance of a class to the service container:

namespace App\Providers;

use Eluceo\iCal\Component\Calendar;
use Illuminate\Support\ServiceProvider;

class IcalProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->instance('iCal', function () {
            return new Calendar(config('calendar.name'));
        });
    }
}

As I understand the documentation on binding an instance, this allows me to bind the key iCal to the service container so that later in my controller or service class I can type hint iCal and the instance created in the service provider will be used.

So I created a controller and tried to type hint my instance:

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class CalendarInviteController extends Controller
{
    public function download(iCal $ical, $sessionId)
    {
        dd($ical);
    }
}

But when I do I get the error:

Class App\Http\Controllers\iCal does not exist

Makes sense, as it applies it's looking for a class named iCal in the controller namespace which doesn't exist. There's not a use statement for the instance since iCal is just a text key, so I tried telling it to look at the root namespace thinking that may fix it:

public function download(\iCal $ical, $sessionId)

and I get the error:

Class iCal does not exist

When I read the section of the documentation on resolving from the service container it looks like the only thing I need to do in the controller is type hint to get the instance.

Am I misunderstanding the docs?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire