Un marco ultraligero de localización de servicios/inyección de dependencias para Swift 5.x en iOS.
Nota: Resolver ahora está oficialmente obsoleto y reemplazado por mi nuevo sistema de inyección de dependencia, Factory. Factory es un verdadero sistema de inyección de dependencias basado en contenedores que es seguro en tiempo de compilación y es más pequeño, liviano y rápido que Resolver. Por muy bueno que sea Resolver, Factory es mejor.
Los marcos de inyección de dependencia admiten el patrón de diseño de inversión de control. Dejando a un lado las definiciones técnicas, la inyección de dependencia se reduce prácticamente a:
| Darle a un objeto las cosas que necesita para hacer su trabajo.
Eso es todo. La inyección de dependencia nos permite escribir código débilmente acoplado y, como tal, más fácil de reutilizar, simular y probar.
Para obtener más información, consulte: Una suave introducción a la inyección de dependencia.
Hay seis estrategias clásicas de inyección de dependencia:
Resolver los admite a todos. Siga los enlaces para obtener una breve descripción, ejemplos y los pros y los contras de cada uno.
Hablando de anotaciones, Resolver ahora admite la resolución de servicios utilizando la nueva sintaxis de contenedor de propiedades en Swift 5.1.
class BasicInjectedViewController : UIViewController {
@ Injected var service : XYZService
@ LazyInjected var service2 : XYZLazyService
@ WeakLazyInjected var service3 : XYZAnotherLazyService ?
}
Simplemente agregue la palabra clave Injected y sus dependencias se resolverán automáticamente. Consulte la documentación de Anotaciones para obtener más información sobre esta y otras estrategias.
También hay un contenedor @InjectedObject
que puede inyectar objetos observables en vistas SwiftUI.
Resolver se implementa en poco más de 700 líneas de código real en un solo archivo, pero incluye un montón de funciones en esas 700 líneas.
TLDR: al menos, asegúrese de leer sobre la inferencia automática de tipos, los alcances y las opciones.
Usar Resolver es un proceso simple de tres pasos:
Como se mencionó, Resolver es un sistema de inyección de dependencias ultraligero, implementado en poco más de 700 líneas de código y contenido en un solo archivo.
Resolver también está diseñado para el rendimiento. SwinjectStoryboard, por ejemplo, es un excelente sistema de inyección de dependencia, pero Resolver es aproximadamente un 800% más rápido a la hora de resolver cadenas de dependencia que Swinject.
Y a diferencia de otros sistemas, Resolver está escrito 100% en Swift 5, sin código Objective-C, cambios de métodos ni dependencias internas en el tiempo de ejecución de Objective-C.
Además, solucionador:
Finalmente, con la inferencia automática de tipos también tiende a escribir entre un 40 y un 60 % menos de código de inyección de dependencia utilizando Resolver.
Resolver es compatible con CocoaPods y Swift Package Manager.
pod " Resolver "
Resolver en sí es solo un archivo fuente único (Resolver.swift), por lo que también es fácil descargar el archivo y agregarlo a su proyecto.
Tenga en cuenta que la versión actual de Resolver (1.4) es compatible con Swift 5.3 y que la versión mínima de iOS actualmente compatible con esta versión es iOS 11.
Lea la guía de instalación para obtener información sobre la compatibilidad con versiones anteriores.
He hecho público mi repositorio de Builder. Es una aplicación iOS sencilla de estilo maestro/detalle que contiene ejemplos de...
También lo uso para jugar con algún código nuevo que utiliza patrones de creación de estilo SwiftUI para construir la interfaz de usuario y generar solicitudes de red. Échale un vistazo.
Es posible que las actualizaciones recientes de Resolver provoquen cambios importantes en su código base.
Resolver 1.4 mejoró la seguridad y el rendimiento de los subprocesos. No hay cambios importantes, aunque el acceso directo a los ámbitos de Resolver ahora está obsoleto. Ver: Alcances.
Resolver 1.3 agrega espacios de nombres a Resolver. El registro de nombres permite un mejor autocompletado y hace que su código sea más seguro al reducir posibles errores de evaluación en tiempo de ejecución. Este es un posible cambio radical. Ver: Instancias con nombre
Resolver 1.2 cambió la forma en que se pasan los argumentos a la fábrica de registro para brindar un mejor soporte para pasar y manejar argumentos únicos y múltiples. Este es un cambio radical. Ver: Pasar y manejar múltiples argumentos
Resolver 1.5 actualizó varios de los mecanismos de registro y almacenamiento en caché utilizados en Resolver. Probablemente este no sea un problema a menos que haya escrito algo que dependa del comportamiento interno de Resolver.
Si desea apoyar mi trabajo en Factory y Resolver, ¡considere un patrocinio de GitHub! Existen muchos niveles para un mayor apoyo e incluso para tutoría y formación empresarial.
¡O simplemente puedes invitarme a una taza de café!
Resolver está diseñado, implementado, documentado y mantenido por Michael Long, ingeniero líder de software iOS y uno de los 1000 principales escritores de tecnología en Medium.
Michael también fue uno de los ganadores del Open Source Peer Reward de Google en 2021 por su trabajo en Resolver.
Resolver está disponible bajo la licencia MIT. Consulte el archivo de LICENCIA para obtener más información.