toConstructor binding sample - koriym/Ray.Di GitHub Wiki
<?php
require dirname(__DIR__) . '/vendor/autoload.php';
use Ray\Di\AbstractModule;
use Ray\Di\Di\Inject;
use Ray\Di\Di\Named;
use Ray\Di\Injector;
class SolarModule extends AbstractModule
{
private $options;
public function __construct($options)
{
$this->options = $options;
}
/**
* {@inheritdoc}
*/
protected function configure()
{
// provider binding
foreach ($this->options as $name => $option) {
$optionName = "options.solr.{$name}";
$this->bind(\SolrClient::class)->annotatedWith($name)->toConstructor(
\SolrClient::class,
"clientOptions=$optionName"
);
$this->bind()->annotatedWith($optionName)->toInstance($option);
}
}
}
class IndexPage
{
/**
* @var \SolrClient
*/
private $fooSolrClient;
/**
* @var \SolrClient
*/
private $barSolrClient;
/**
* @Inject
* @Named("foo")
*/
public function setFooClient(\SolrClient $solrClient)
{
$this->fooSolrClient = $solrClient;
}
/**
* @Inject
* @Named("bar")
*/
public function setBarClient(\SolrClient $solrClient)
{
$this->barSolrClient = $solrClient;
}
public function showOptions()
{
var_dump($this->fooSolrClient->getOptions()['port']);
var_dump($this->barSolrClient->getOptions()['port']);
}
}
$options = [];
$options['foo'] = ['port' => 8080];
$options['bar'] = ['port' => 8081];
$injector = new Injector(new SolarModule($options));
/** @var $page IndexPage */
$page = $injector->getInstance(IndexPage::class);
$page->showOptions();
//int(8080)
//int(8081)