Service Providers

The App\ServiceProviders folder should contain Service Providers files. The usage of Laravel Service Providers is the best way to specify when a concrete implementation is bound to a contract/interface:

    public function register()
    {
        $this->app->singleton(Contract::class, function ($app) {
            return new Concrete(config('database'));
        });
    }

    app(Contract::class) // Returns a Concrete implementation.

This is useful, because you may want to ask for the contract instead of the implementation:

    public function handle(ServiceContract $service)
    {
        $service->execute('foo');
    }