This commit is contained in:
2023-04-15 23:32:00 +08:00
parent 06e2b691bb
commit eebd01bcc5
9 changed files with 404 additions and 349 deletions
+31
View File
@@ -0,0 +1,31 @@
<?php
namespace Kiri\Di\Inject;
use Kiri\Di\Interface\InjectPropertyInterface;
#[\Attribute(\Attribute::TARGET_PROPERTY)]
class Config implements InjectPropertyInterface
{
/**
* @param string $key
*/
public function __construct(public string $key)
{
}
/**
* @param object $class
* @param string $property
* @return void
*/
public function dispatch(object $class, string $property): void
{
// TODO: Implement dispatch() method.
$class->{$property} = config($this->key);
}
}
+37
View File
@@ -0,0 +1,37 @@
<?php
namespace Kiri\Di\Inject;
use Exception;
use Kiri\Di\Interface\InjectPropertyInterface;
use Kiri\Di\Container as DContainer;
#[\Attribute(\Attribute::TARGET_PROPERTY)]
class Container implements InjectPropertyInterface
{
/**
* @param string $service
* @param mixed|null $default
* @throws Exception
*/
public function __construct(readonly public string $service, public mixed $default = null)
{
}
/**
* @param object $class
* @param string $property
* @return void
* @throws Exception
*/
public function dispatch(object $class, string $property): void
{
$class->{$property} = DContainer::instance()->get($this->service);
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace Kiri\Di\Inject;
use Kiri\Di\Container;
use Kiri\Di\Interface\InjectParameterInterface;
#[\Attribute(\Attribute::TARGET_PARAMETER)]
class ContainerParams implements InjectParameterInterface
{
/**
* @param mixed $value
*/
public function __construct(readonly public mixed $value)
{
}
/**
* @return mixed|null
* @throws \Exception
*/
public function dispatch(): mixed
{
return Container::instance()->get($this->value);
}
}
+37
View File
@@ -0,0 +1,37 @@
<?php
namespace Kiri\Di\Inject;
use Exception;
use Kiri\Di\Container;
use Kiri\Di\Interface\InjectPropertyInterface;
use Kiri\Di\LocalService;
#[\Attribute(\Attribute::TARGET_PROPERTY)]
class Service implements InjectPropertyInterface
{
/**
* @param string $service
*/
public function __construct(readonly public string $service)
{
}
/**
* @param object $class
* @param string $property
* @return void
* @throws Exception
*/
public function dispatch(object $class, string $property): void
{
$service = Container::instance()->get(LocalService::class);
$class->{$property} = $service->get($this->service);
}
}
+36
View File
@@ -0,0 +1,36 @@
<?php
namespace Kiri\Di\Inject;
use Exception;
use Kiri\Di\Interface\InjectParameterInterface;
use Kiri\Di\LocalService;
use Kiri\Di\Container;
#[\Attribute(\Attribute::TARGET_PARAMETER)]
class ServiceParams implements InjectParameterInterface
{
/**
* @param mixed $value
*/
public function __construct(readonly public mixed $value)
{
}
/**s
* @return mixed|null
* @throws Exception
*/
public function dispatch(): mixed
{
$service = Container::instance()->get(LocalService::class);
return $service->get($this->value);
}
}