zen icon indicating copy to clipboard operation
zen copied to clipboard

Autowiring class method/passed closure?

Open oakleaf opened this issue 1 year ago • 1 comments

Hello, Im experimenting with Zen (among other libraries) for finding the perfect DI for my framework. I really can't get my head around how to create the autowiring functionality for a specific method of my "kernel" class.

E.g.

class Kernel{
public function init(\Closure $_callback)
{
return $_callback(); // I want this CB to have autowired classes available
}
}

// Index.php
(new Kernel())->init(function(Request $request){

I have figured out to use EntryPoints in my configuration in order to register which classes that should be autowired, but I can't figure out how to put that into classes & methods like Im trying to explain above. Is it even possible?

oakleaf avatar Dec 04 '22 20:12 oakleaf

Hi,

Sorry, I may not get what the exact problem is, but my understanding is that you would like to resolve the Request class as the $request parameter. The simplest solution is to do the following:

class Kernel
{
    private Request $request;

    public function __construct(Request $request) {
        $this->request = $request;
    }

    public function init(\Closure $_callback)
    {
        return $_callback($this->request);
    }
}

// Index.php

$container = new Container(); // Instantiate Zen
$container->get(Kernel::class)->init(function(Request $request){}));

kocsismate avatar Dec 21 '22 17:12 kocsismate