Skip to content

Instantly share code, notes, and snippets.

@madapaja
Created July 17, 2012 10:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save madapaja/3128493 to your computer and use it in GitHub Desktop.
Save madapaja/3128493 to your computer and use it in GitHub Desktop.
ray / symfony di
<?php
use Ray\Di\Injector;
require __DIR__.'/vendor/autoload.php';
$di = Injector::create([]);
$di->getContainer()->params['MailerInterface'] = array(
'transport' => 'sendmail',
);
$di->getContainer()->params['NewsletterManager'] = array(
'mailer' => $di->getContainer()->lazyNew('Mailer'),
);
$newsletterManager = $di->getInstance('NewsletterManager');
var_dump($newsletterManager);
abstract class MailerInterface {
private $transport;
public function __construct($transport)
{
$this->transport = $transport;
}
}
class Mailer extends MailerInterface {}
class NewsletterManager
{
private $mailer;
public function __construct(MailerInterface $mailer)
{
$this->mailer = $mailer;
}
}
<?php
use Doctrine\Common\Annotations\AnnotationRegistry;
use Ray\Di\Di\Inject;
use Ray\Di\Di\Named;
use Ray\Di\AbstractModule;
use Ray\Di\Injector;
$loader = require __DIR__.'/vendor/autoload.php';
AnnotationRegistry::registerLoader(array($loader, "loadClass"));
$di = Injector::create([new NewsletterModule]);
$newsletterManager = $di->getInstance('NewsletterManager');
var_dump($newsletterManager);
class NewsletterModule extends AbstractModule
{
protected function configure()
{
$this->bind()->annotatedWith('transport_type')->toInstance('sendmail');
$this->bind('MailerInterface')->to('Mailer');
}
}
abstract class MailerInterface {
private $transport;
/**
* @Inject
* @Named("transport_type")
*/
public function __construct($transport)
{
$this->transport = $transport;
}
}
class Mailer extends MailerInterface {}
class NewsletterManager
{
private $mailer;
/**
* @Inject
*/
public function __construct(MailerInterface $mailer)
{
$this->mailer = $mailer;
}
}
<?php
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
require __DIR__.'/vendor/autoload.php';
$container = new ContainerBuilder();
$container->register('mailer', 'Mailer')
->addArgument('sendmail');
$container->register('newsletter_manager', 'NewsletterManager')
->addArgument(new Reference('mailer'));
$newsletterManager = $container->get('newsletter_manager');
var_dump($newsletterManager);
class Mailer
{
private $transport;
public function __construct($transport)
{
$this->transport = $transport;
}
// ...
}
class NewsletterManager
{
private $mailer;
public function __construct(Mailer $mailer)
{
$this->mailer = $mailer;
}
// ...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment