Sto cercando l'idea di creare un contenitore DI che possa memorizzare più istanze dello stesso oggetto. In genere, un contenitore DI deve memorizzare una singola istanza dell'oggetto o creare un nuovo oggetto ogni volta che viene richiesto. Ecco l'esempio su cui sto lavorando:
class Container {
protected $store;
public function get($alias) {
if (isset($this -> store[$alias])) {
return $this -> store[$alias]($this);
}
}
public function bind($alias, Closure $obj) {
$this -> store[$alias] = $obj;
}
}
Tutto funziona bene, in questo caso:
$c = new Container();
$c -> bind('book', function() {
return new Book();
});
$book = $c -> get('book');
Ora immagino di avere un "Catalogo" di classe, il cui comportamento è dettato dai parametri passati al suo costruttore:
class Catalog {
protected $category;
public function __construct($category) {
$this -> category = $category;
}
}
Voglio solo una singola istanza di ogni categoria memorizzata nel contenitore. Sì, posso farlo facilmente
$c -> bind('catalog.magazines', function() {
return new Catalog('magazines');
});
$c -> bind('catalog.books', function() {
return new Catalog('books');
});
Ma le categorie possono essere create dinamicamente in fase di runtime e questo sembra un sacco di codice. C'è una soluzione conveniente per questo? Solo un'istanza di ciascun oggetto e può gestirli dinamicamente. O forse non è affatto DI?