Un framework ultraléger d'injection de dépendances/localisateur de services pour Swift 5.x sur iOS.
Remarque : Resolver est désormais officiellement obsolète et remplacé par mon nouveau système d'injection de dépendances, Factory. Factory est un véritable système d'injection de dépendances basé sur des conteneurs, sûr au moment de la compilation et plus petit, plus léger et plus rapide que Resolver. Aussi bon que soit Resolver, Factory est meilleur.
Les frameworks d’injection de dépendances prennent en charge le modèle de conception Inversion of Control. Mis à part les définitions techniques, l’injection de dépendances se résume à :
| Donner à un objet les éléments dont il a besoin pour faire son travail.
C'est ça. L'injection de dépendances nous permet d'écrire du code faiblement couplé et, en tant que tel, plus facile à réutiliser, à simuler et à tester.
Pour en savoir plus, voir : Une introduction douce à l’injection de dépendances.
Il existe six stratégies classiques d’injection de dépendances :
Le résolveur les prend tous en charge. Suivez les liens pour une brève description, des exemples ainsi que les avantages et les inconvénients de chacun.
En parlant d'annotations, Resolver prend désormais en charge la résolution de services à l'aide de la nouvelle syntaxe de wrapper de propriétés dans Swift 5.1.
class BasicInjectedViewController : UIViewController {
@ Injected var service : XYZService
@ LazyInjected var service2 : XYZLazyService
@ WeakLazyInjected var service3 : XYZAnotherLazyService ?
}
Ajoutez simplement le mot-clé Injected et vos dépendances seront résolues automatiquement. Consultez la documentation sur les annotations pour en savoir plus sur cette stratégie et sur d'autres.
Il existe également un wrapper @InjectedObject
qui peut injecter des objets observables dans les vues SwiftUI.
Le résolveur est implémenté dans un peu plus de 700 lignes de code réel dans un seul fichier, mais il contient une tonne de fonctionnalités dans ces 700 lignes.
TLDR : si rien d'autre, assurez-vous de lire sur l'inférence de type automatique, les étendues et les options.
L'utilisation de Resolver est un processus simple en trois étapes :
Comme mentionné, Resolver est un système d'injection de dépendances ultraléger, implémenté dans un peu plus de 700 lignes de code et contenu dans un seul fichier.
Le résolveur est également conçu pour les performances. SwinjectStoryboard, par exemple, est un excellent système d'injection de dépendances, mais Resolver se révèle environ 800 % plus rapide à résoudre les chaînes de dépendances que Swinject.
Et contrairement à certains autres systèmes, Resolver est écrit à 100 % en Swift 5, sans code Objective-C, sans tourbillon de méthode ni dépendances internes sur le runtime Objective-C.
De plus, résolveur :
Enfin, avec l'inférence de type automatique, vous avez également tendance à écrire environ 40 à 60 % de code d'injection de dépendances en moins à l'aide du résolveur.
Resolver prend en charge CocoaPods et Swift Package Manager.
pod " Resolver "
Le résolveur lui-même n'est qu'un fichier source unique (Resolver.swift), il est donc également facile de simplement télécharger le fichier et de l'ajouter à votre projet.
Notez que la version actuelle de Resolver (1.4) prend en charge Swift 5.3 et que la version minimale d'iOS actuellement prise en charge avec cette version est iOS 11.
Lisez le guide d'installation pour plus d'informations sur la prise en charge des versions antérieures.
J'ai rendu public mon référentiel Builder. Il s'agit d'une application iOS simple de style maître/détail qui contient des exemples de...
Je l'utilise également pour jouer avec un nouveau code qui utilise des modèles de générateur de style SwiftUI pour construire la construction de l'interface utilisateur et pour construire des requêtes réseau. Vérifiez-le.
Il est possible que les mises à jour récentes de Resolver entraînent des modifications importantes dans votre base de code.
Resolver 1.4 a amélioré la sécurité et les performances des threads. Aucun changement radical, bien que l'accès direct aux étendues du résolveur soit désormais obsolète. Voir : Portées.
Resolver 1.3 ajoute des espaces de nom au résolveur. L'enregistrement des noms permet une meilleure saisie semi-automatique et rend votre code plus sûr en réduisant les erreurs potentielles d'évaluation d'exécution. Il s’agit d’un changement radical possible. Voir : Instances nommées
Le résolveur 1.2 a modifié la façon dont les arguments sont transmis à la fabrique d'enregistrement afin de fournir une meilleure prise en charge de la transmission et de la gestion des arguments simples et multiples. Il s’agit d’un changement radical. Voir : Transmission et gestion de plusieurs arguments
Resolver 1.5 a mis à jour plusieurs mécanismes d'enregistrement et de mise en cache utilisés dans Resolver. Celui-ci n'est probablement pas un problème à moins que vous n'ayez écrit quelque chose qui dépend du comportement interne du résolveur.
Si vous souhaitez soutenir mon travail sur Factory et Resolver, envisagez un parrainage GitHub ! De nombreux niveaux existent pour un accompagnement accru et même pour le mentorat et la formation en entreprise.
Ou tu peux juste m'offrir une tasse de café !
Resolver est conçu, mis en œuvre, documenté et maintenu par Michael Long, ingénieur logiciel iOS principal et l'un des 1 000 meilleurs rédacteurs technologiques sur Medium.
Michael a également été l'un des lauréats Open Source Peer Reward de Google en 2021 pour son travail sur Resolver.
Le résolveur est disponible sous licence MIT. Voir le fichier LICENSE pour plus d'informations.