Jeśli powiązać klasę MKOl ...laravel: Wiązanie z IoC Container
App::bind('Thing', function() {
return new \ThingOne;
});
Następnie ThingOne
obiekt będzie nigdy być instancja chyba nazwać App::make('Thing')
. To jest dobra rzecz.
Jednak przy próbie nadpisania że wiązanie:
App::bind('Thing', function() {
return new \ThingOne;
});
App::bind('Thing', function() {
return new \ThingTwo;
});
App::bind('Thing', function() {
return new \ThingThree;
});
... potem ThingTwo
przedmiot i ThingThree
obiekt zostanie natychmiast (i ich konstruktorzy nazywa), chociaż nigdy nie nazywa App::make('Thing')
! To jest złe! Dlaczego i jak można temu zapobiec? Do czego służy IoC, jeśli nie pozwala nam na nadpisywanie powiązań, abyśmy mogli rozszerzyć pakiety i co dalej? (Oto, co chciałbym zrobić: powiąż klasy z IoC w moich pakietach, a następnie opcjonalnie nadpisz je podczas implementacji pakietów w innych projektach.)
Przy okazji, dzieje się to niezależnie od tego, czy używasz bind()
czy singleton()
bez różnicy .
Dziękuję bardzo za wskazówki.
Czy próbowałeś wywołać App :: offsetUnset ("Thing") przed ponownym związaniem obiektu? –
@FractalizeR I had not - that does work, thanks! – Leng
Serdecznie zapraszamy :) –