Dependency-Injection-Framework für Kakao?
Interface Builder kann verwendet werden, für die basic-dependency injection in eine Cocoa-app, aber ist jemand bekannt, der mehr kompletten dependency injection-frameworks für Objective-C/Cocoa für, wenn Sie nicht wollen, um Objekte zu instanziieren, die in einer NIB-Datei?
Bearbeiten
Klären, erkenne ich, dass IB kann verwendet werden, für die basic-DI, aber ich bin auf der Suche nach einem framework mit vollständiger Funktionalität, einschließlich der gesonderten Herstellung und Prüfung von Konfigurationen, entlang der Linien des Groovy oder Federn.
Kommentar zu dem Problem - Öffnen
Kasse aus www.typhoonframework.org
Und hier ist ein weiteres github.com/railsware/BloodMagic
Java ist den meisten sicherlich noch als eine späte Bindung Sprache. Obwohl es verwendet vtable-Stil Versand wie C++, aufgrund der mit einer virtual machine und class-loader-system run-time-Methode abfangen noch möglich ist. Der Ansatz ist etwas umständlicher als messaging (objective-c) und erfordert schwerere Werkzeuge, um es einfach zu verwenden - Dinge wie JSDK dynamische proxies, cglib/asm oder eines JVM-Agents. Dadurch können Dinge wie AOP oder 'manged objects" (hibernate/core Daten), aber hat wenig zu tun mit DI. Ich glaube nicht, dass die 'java-statische - Bedarf DI, Objective-C dynamic" gilt.
InformationsquelleAutor der Frage Barry Wark | 2008-11-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie werden feststellen, dass Sie es nicht brauchen, in spät bindenden Sprachen wie Objective C, Ruby, Lisp und so weiter. Wie Jamis' Offenbarung, dass er im Begriff war, nach einem viel zu komplizierten Weg, wenn er versuchte, Sie zu bauen, Nadel -, ein DI-framework für Ruby- Net::SSH-revisited.
Hier sind einige links, die hoffentlich geben Sie einige Beispiel-code zu tun ähnliche Dinge in Objective C. Mit Kategorien können Sie im wesentlichen ändern jede Klasse, die das Verhalten zur Laufzeit. Sehen Mac-Entwickler – Tipps- Objective-C: Kategorien und die Cocoa API-docs auf Kategorien. Im wesentlichen brauchen Sie nicht einige zentrale Stelle zu Fragen "was tut x", das ist konfigurierbar, da kann man einfach instanziieren TheThingThatDoesX direkt und wenn etwas anderes geändert werden muss/Haken in das Verhalten, die er nutzen kann Kategorien.
InformationsquelleAutor der Antwort Otto
Einwand von AtomicObject. Es wird geformt, in das Bild von Guice.
InformationsquelleAutor der Antwort justice
Ich werde gehen auf ein Glied und sprechen über diese. Dependency injection, wie beschrieben, durch die top-Antwort nicht die Kern-Problem, dass diejenigen, die es zu benutzen haben. Wir hätten gerne ein Mittel der Entwicklung, wo Eine Komponente nicht direkt instanziieren oder Referenz-Komponente B. Komponente A gebunden ist, durch Protokoll zu B-Komponente und wird nicht referenziert, die von der Komponente A. Dieser ermöglicht die Komponente B ersetzt werden, jederzeit, ohne jemals zu berühren Komponente A. ich runter gestimmt, aber ich werde recherchieren Ihre Referenzen, wie es scheint, gibt es ein paar, die mit Ihnen zu vereinbaren. Ich versuche nicht zu Debatte, nur suchen, um zu lernen. Ich würde gerne verstehen, mehr über die "NÖ, brauchen Sie nicht zu tun" - Ansatz.
InformationsquelleAutor der Antwort Cliff
Typhoon
Fast einem Jahr habe ich veröffentlicht: https://github.com/typhoon-framework/Typhoon
Die Typhoon-website listet die wichtigsten Funktionen. Eine kurze Zusammenfassung:
Nicht-invasiv. Keine Makros oder XML erforderlich. Verwendet eine leistungsstarke Objective-C-runtime-Ansatz.
Macht es einfach, mehrere Konfigurationen haben, von der gleichen Basis-Klasse oder Protokoll.
Keine Magie Streicher - unterstützt IDE-refactoring, code-Vervollständigung und compile-Zeit-Prüfung.
Unterstützt Injektion von view-Controller-und storyboard-integration.
Unterstützt sowohl Initialisierer-und property-injection, plus life-cycle-management.
Leistungsstarken Speicher-management-Funktionen. Bietet vorkonfigurierte Objekte, ohne den Speicherbedarf von singletons.
Hervorragende Unterstützung für zirkuläre Abhängigkeiten.
Lean. Es hat einen sehr geringen Platzbedarf, so eignet sich für CPU-und memory-constrained devices.
Schlacht-geprüft - Einsatz in allen Arten von Appstore-Anwendungen
Einem International verteilten Kern-team (wir überwachen sogar StackOverflow), also Unterstützung für alle Ihre Fragen sind nie weit Weg 🙂
API-Dokumentation und Beispiel-app
Qualitätskontrolle:
Unterhalten wir auch eine robuste Qualitätskontrolle-system.
InformationsquelleAutor der Antwort Jasper Blues
Müssen Sie nicht instanziieren Sie das Objekt in der NIB-Datei. Wenn Sie der Besitzer der Datei, um Ihr Objekt der Klasse und dann verknüpfen Sie Dinge, die in der Ansicht/Fenster/was auch immer bis zu, dass, können Sie Ihr Objekt als Eigentümer zur Laufzeit durch das laden der nib-Datei manuell. So können Sie eine dynamische Instanz eines Objekts, das noch bekommt Abhängigkeiten injiziert richtig.
InformationsquelleAutor der Antwort Jason Coco
Was ist mit dependecy injection Umsetzung auf Ziel-IOC
InformationsquelleAutor der Antwort mivasi
Was ObjectivePim?
ObjectivePim
InformationsquelleAutor der Antwort Víctor B.
Ich geschrieben habe, eine sehr einfache DI-container, der code ist auf GitHub. Es können nur die nackten Grundlagen, dh. entdecken Sie die Abhängigkeiten von einem Objekt und erfüllen Sie Sie mit anderen Objekten. Ich habe herausgefunden, dass es anwendbar in real-Welt-Anwendungen, die code ist sehr einfach und es macht Spaß zu hacken.
InformationsquelleAutor der Antwort zoul
Hat jeder schaute auf die Assoziative Verweise - Funktion von Mac OS X 10.6?
Ich glaube, mit dieser wäre es möglich, zu bauen oder haben bereits etwas ähnliches wie DI.
Soweit ich gesehen habe allerdings keine Referenz auf ein Objekt geholt werden manuell mit objc_getAssociatedObject().
Manfred
InformationsquelleAutor der Antwort Manfred
Interface Builder keine dependency injection. Es ist auch nicht notwendig. Interface Builder serialisiert Objekte. Wenn eine Feder ist, "erwacht" (aka geöffnet), es gibt keine "Abhängigkeiten" zu lösen-es gibt nur Eigenschaften zu setzen. Sehr, sehr einfach. Eröffnung einer Feder stützt sich ausschließlich auf das NSCoding-Protokoll und key-value coding.
Dependency injection, ziemlich viel make-Arbeit-Projekt in den besten Zeiten, oder am besten eine generalisierte Klebstoff-Schicht zwischen den Komponenten unabhängig entworfen, ist von keinerlei nutzen in gut geschrieben Objective-C-code. Du fragst nach einem tool, dass Sie nicht brauchen.
In Objective-C, software, erfordert einen anonymen Dienst erklärt ein Protokoll. Dienstleistungen, dann nehmen diese zu Protokoll. Kunden laden von services, wie dynamische plugins. Auf der anderen Seite, wenn der server geschrieben wurde, bevor der client, es ist einfach eine Frage des Schreibens ein neues plug-in die passt die vorhandene Schnittstelle zum Protokoll. Das ist weniger Arbeit und einfacher als zu versuchen zu definieren, eine intermediate data-driven-system für "zu entdecken" (bitte) eine Schnittstelle zur Laufzeit.
Ist es nicht klar, dass das große Geheimnis der DI ist nur, dass es ein Weg, um code zu schreiben in XML anstatt in der Muttersprache? Ich würde wirklich gerne hören, ist ein gutes argument, wie XML ist irgendwie eine bessere Programmiersprache als eine echte Programmiersprache. Es macht auch keinen Sinn.
InformationsquelleAutor der Antwort Bored
Ich arbeite mit Spring den ganzen Tag und ich habe Groovy. Ich bin keineswegs ein XCode/Cocoa-Experte, aber IB hat nur einige dependency injection, die Groovy gar nicht wirklich zu tun behauptet.
Ich denke, Sie sind nicht auf der Suche für DI, aber eher für eine gut kompilierte Reihe von integrierten Bibliotheken erspart Ihnen die Eingabe eine Menge von code, die andere Leute auch geschrieben haben. Ich denke, es gibt keinen Frühling, wie die Rahmenbedingungen für den Kakao, da für einige Grund, warum Menschen dazu neigen, um zu sehen, "Open Source" als "nicht Plattform abhängig" und daher ist Kakao ein wenig Links draußen in der Kälte.
Je nach Ihren Bedürfnissen gibt es aber einige nette Kostenlose open-source-Bibliotheken für die Kakao -, alle auf CocoaDev in einem nette Liste.
Ich weiß, es ist nicht Frühling, aber ich hoffe, es hilft.
InformationsquelleAutor der Antwort Rolf
DI ist eine Eigenschaft einer Ausführung runtime-Umgebung erfordern dynamische Bindung. Ich bin sehr neu in Obj-C und Cocoa so kann ich Sie sprechen außer der Reihe. Es sei denn, ich bin fehlt etwas, ich sehe nicht, wie könnte man implementieren DI außer durch die Interpretation von Obj-C anstatt kompilieren, oder durch ändern der runtime-Umgebung.
Ich vermute, dass die DI wie Verhalten von IB ist, weil es eine domain-spezifische runtime environment im Zusammenhang mit apps, die damit gebaut.
Bin ich gerne korrigiert werden wenn.
Kategorien angezeigt werden, die eine Implementierung von mixin ' s, die dynamische dispatch-Methoden, um einen Delegaten. Eher kühl und ähnlich zu Java ' s interface-Konzept, dachte die details sind Verschieden und aus den folgenden, die ich nicht sehen kann, wenn Konstanten definiert werden können, in eine Kategorie, wenn die Felder nicht.
Objektive-c Kategorien
InformationsquelleAutor der Antwort groovePupil