provider sample - koriym/Ray.Di GitHub Wiki
<?php
require dirname(__DIR__) . '/vendor/autoload.php';
use Ray\Di\AbstractModule;
use Ray\Di\Di\Named;
use Ray\Di\Injector;
use Ray\Di\ProviderInterface;
abstract class AbstractSolarClientProvider implements ProviderInterface
{
/**
* {@inheritdoc}
*/
public function get()
{
$solarClint = new SolrClient($this->options);
return $solarClint;
}
}
class FooSolarClientProvider extends AbstractSolarClientProvider
{
protected $options;
/**
* @Named("foo_options")
*/
public function __construct(array $options)
{
$this->options = $options;
}
}
class SolarModule extends AbstractModule
{
private $options;
public function __construct($options)
{
$this->options = $options;
}
/**
* {@inheritdoc}
*/
protected function configure()
{
// provider binding
$this->bind()->annotatedWith("foo_options")->toInstance($this->options['foo']);
$this->bind(SolrClient::class)->annotatedWith("foo")->toProvider(FooSolarClientProvider::class);
}
}
class IndexPage
{
private $solrClient;
/**
* @Named("foo")
*/
public function __construct(SolrClient $solrClient)
{
$this->solrClient = $solrClient;
}
public function run()
{
var_dump($this->solrClient);
}
}
$options['foo'] = ['port' => 8000];
$injector = new Injector(new SolarModule($options));
/** @var $page IndexPage */
$page = $injector->getInstance(IndexPage::class);
$page->run();
//class SolrClient#16 (1) {
// private $_hashtable_index =>
// int(32421)
//}