52 votes

Cadre d'injection de dépendance pour Cocoa?

Interface Builder peut être utilisé pour l'injection de dépendance de base dans une application Cocoa, mais est-ce que quelqu'un est au courant des infrastructures d'injection de dépendance plus complètes pour Objective-C / Cocoa lorsque vous ne souhaitez pas instancier des objets dans un fichier NIB?

modifier

Pour clarifier, je reconnais que IB peut être utilisé pour les DI de base, mais je cherche un framework avec des fonctionnalités plus complètes, y compris des configurations de production et de test séparées, similaires à Groovy ou Springs.

29voto

justice Points 400

objection de AtomicObject. Il est moulé à l'image de Guice.

16voto

Cliff Points 3598

Je vais aller sur une branche et s'exprimer sur ce. L'injection de dépendance tel que décrit par la réponse ne traite pas de la question centrale que ceux qui cherchent à l'utiliser. Nous aimerions un moyen de développement où le composant A ne pas instancier directement ou composant de référence B. la Composante A est lié par le protocole de la composante B et n'est pas référencé par composante A. Cela permet de composant B à être remplacés à tout moment, sans jamais toucher le composant A. je baisse voté mais je vais faire des recherches sur vos références comme il semble qu'il y ait quelques-uns qui sont d'accord avec vous. Je n'essaie pas de débat, juste à la recherche d'apprendre. Je voudrais comprendre plus au sujet de la "non vous n'avez pas besoin de le faire".

11voto

Otto Points 5166

Je pense que vous verrez que vous n'avez pas besoin à la fin de liaison des langues comme l'Objective-C, Ruby, Lisp et ainsi de suite. Comme Jamis " révélation qu'il était trop complexe chemin quand il a essayé de construire une aiguille, un DI-cadre pour Ruby- Net::SSH revisité.

Voici quelques liens qui nous l'espérons vous donner un exemple de code pour faire la même chose en Objective C. Avec des catégories vous pouvez changer toute la classe de comportement au moment de l'exécution. Voir un Développeur Mac Conseils – Objective-C: les Catégories et les API Cocoa docs sur les catégories. Essentiellement, vous n'avez pas besoin d'un lieu central pour demander "la chose qui ne x", c'est configurable, vous pouvez instancier TheThingThatDoesX directement et si quelque chose doit changer/crochet dans ce comportement, il peut utiliser les catégories.

5voto

Jasper Blues Points 7262

Typhon

Près d'un an, j'ai sorti: https://github.com/typhoon-framework/Typhoon

Le Typhon-site répertorie les principales caractéristiques. Un rapide résumé:

  • Non-invasive. Pas de faux annotations (macros) ou XML requis. Utilise un puissant Objective-C approche.

  • Il est facile d'avoir plusieurs configurations de la même classe de base ou de protocole.

  • Pas de magie cordes - supporte les disques IDE refactoring, de l'achèvement de code et compilez-le temps de vérifier.

  • Prend en charge l'injection de vue des contrôleurs et scénario d'intégration.

  • Prend en charge à la fois de l'initialiseur et bien d'injection, plus la gestion du cycle de vie.

  • De puissantes fonctions de gestion de mémoire. Offre de pré-configuré objets, sans la surcharge de la mémoire de singletons.

  • Excellent support pour les dépendances circulaires.

  • Lean. Il a un très faible encombrement, donc est approprié pour le CPU et de la mémoire dispositifs de contraintes.

  • Des combats - utilisé dans toutes sortes de Appstore-les applications proposées

  • Internationalement distribué équipe de base (nous avons même moniteur StackOverflow), donc la prise en charge de vos questions ne sont jamais loin :)

Les Docs de l'API et de l'exemple d'application

Contrôle De La Qualité:

Nous disposons également d'un solide système de contrôle de qualité.

  • Chaque livraison déclenche une série de tests de régression
  • Nous maintenons haut de la couverture de test.

4voto

Jason Coco Points 52303

Vous n'avez pas à instancier l'objet dans le fichier NIB. Si vous définissez le propriétaire du fichier sur la classe de votre objet, puis associez des éléments dans la vue / fenêtre / quoi que ce soit jusque-là, vous pouvez définir votre objet en tant que propriétaire à l'exécution en chargeant le fichier nib manuellement. De cette façon, vous pouvez avoir une instance dynamique d'un objet qui reçoit toujours les dépendances injectées correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X