Podoba mi się podpinanie zależności w Springu. Komponenty tworzymy tak:
@http://www.google.com/search?hl=en&q=allinurl%3Acomponent+java.sun.com&btnI=I%27m%20Feeling%20Lucky public class MarkdownParser { public http://www.google.com/search?hl=en&q=allinurl%3Astring+java.sun.com&btnI=I%27m%20Feeling%20Lucky parse(http://www.google.com/search?hl=en&q=allinurl%3Astring+java.sun.com&btnI=I%27m%20Feeling%20Lucky input) { /* kod metody */ } }
@http://www.google.com/search?hl=en&q=allinurl%3Acomponent+java.sun.com&btnI=I%27m%20Feeling%20Lucky public class NewsController { @Autowired final NewsDAO newsDAO; @Autowired final MarkdownParser markdownParser; @GetMapping("/read/{id}") public http://www.google.com/search?hl=en&q=allinurl%3Astring+java.sun.com&btnI=I%27m%20Feeling%20Lucky read(@PathVariable int id) { return markdownParser.parse(newsDAO.getById(id)); } }
// Uwaga: jest set() i setShared() $di->set('markdownParser', function() { return new MarkdownParser; });
class MarkdownParser extends \Phalcon\Mvc\User\Component { public function parse($input) { /* kod metody */ } }
public class NewsController extends \Phalcon\Mvc\Controller { public function readAction($id) { $this->view->text = $this->markdownParser->parse(News::findFirstById($id)); } }
Do takich celów służą moduły we frameworkach odpowiedzialne za Dependency Injection. Przykłądowo w przypadku Zend Framework 2 jest to klasa Service Manager.
Wystarczy dopisać jakiegoś rodzaju listener, który za pomocą Reflection zeskanuje dodaną do kontenera klasę i poszuka wszelkich adnotacji. Następnie potrzebna fabryka, która przy zwracaniu obiektów danego serwisu podepnie zadeklarowane za pomocą adnotacji serwisy.
Założeniem jest, że adnotowany serwis będzie pobierany wyłącznie za pomocą Service Managera. Wykonanie w kodzie zwyczajnie
, spowoduje oczywiście, że zależności nie zostaną wstrzyknięte. Jeżeli zależy Ci na tym drugim, niezbędne byłyby jakieś natywne rozszerzenia do PHP.
$service = new Service();
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)