Ich schreibe gerade mein eigenes MVC-Framework für Lernzwecke und ich entschied mich, einen Dependency-Injection-Container zu verwenden, um gemeinsam genutzte Objekte zwischen Klassen zu teilen (zum Beispiel DB-Instanz).Soll ich Dependency Injection Container (DIC) als Parameter in MVC übergeben?
Ich initialisiert den Container in meiner Bootstrap-Datei und ich habe eine Instanz davon in meiner Application
Klasse, ist es eine gute Praxis, eine Instanz des Containers während des Routing-Prozesses übergeben? (d. h. Übergabe des Containerobjekts als Parameter in ControllerBase
Konstruktor). Ist es auch eine gute Übung, den Container als einen Parameter im Konstruktor meiner ModelBase
zu akzeptieren?
Nein, was Sie tun (die Übergabe der gesamten Sache) wird Service-Locator genannt und ist ein Anti-Muster. – PeeHaa
Der Container sollte nie herumgereicht werden, und wenn es fertig ist, sollte es nur ein lazy-loading-Detail sein. Um dies zu verdeutlichen, sollten Sie niemals etwas in Bezug auf den Container schreiben müssen, wenn Sie eine der an Ihrer MVC-Einrichtung beteiligten Klassen testen, unabhängig davon, ob Sie sich darüber lustig machen oder nicht. – Ocramius
Ich habe eine Antwort über die Verwendung von Globals geschrieben, die viele der gleichen Probleme wie ein Service-Locator vor einer Weile hat. Obwohl es keine exakte Antwort auf Ihre Frage ist, ist es eine Lektüre wert und sicherlich relevant für Ihre Frage http://stackoverflow.com/questions/11923272/use-global-variables-in-a-class/11923384#11923384 – PeeHaa