Estou precisando injetar classes e estou confuso sobre a melhor forma de fazê-lo.
Supondo que o jeito demonstrado a seguir não é o ideal, qual jeito correto de se injetar e auto-resolver uma dependência?
O jeito que encontrei foi passando a TarefaInterface no Controller. Busco uma solução sem usar __construct(TarefasInterface $tarefas)
e setters
.
Tarefas:
namespace App\Classes\Tarefas;
class Tarefas implements TarefasInterface
{
public function adicionar($dadosTarefa, $tarefasUsuario)
{
// ...
}
}
TarefasInterface:
namespace App\Classes\Tarefas;
interface TarefasInterface
{
public function adicionar($dadosTarefa, $tarefasUsuario);
}
TarefasController:
use Illuminate\Http\Request;
use App\Classes\TarefasInterface;
use App\Classes\TarefasUsuarioInterface;
class TarefasController extends Controller
{
public function adicionar(Request $request, TarefasInterface $tarefas, TarefasUsuarioInterface $tarefasUsuario)
{
$tarefa = $tarefas->armazenar($request->all(), $tarefasUsuario);
return redirect()->route('tarefas.edit', [$tarefa->id]);
}
}
TarefasServiceProvider:
namespace App\Classes\Tarefas;
use Illuminate\Support\ServiceProvider;
class TarefasServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind('App\Classes\Tarefas\TarefasInterface', function () {
return new Tarefas();
});
}
}
Em outras palavras, como chamar uma variável $tarefasUsuario
diretamente na class Tarefas
sem ter que passá-la pelo TarefasController
antes, ou sem usar $this->tarefasUsuario
?