cocoa的dependency injection框架?
Interface Builder可以用于Cocoa应用程序中的基本dependency injection,但是当不想在NIB文件中实例化对象时,任何人都可以意识到Objective-C / Cocoa的更完整的dependency injection框架?
编辑
为了澄清,我认识到IB可以用于基本的DI,但我正在寻找一个更完整的function框架,包括单独的生产和testingconfiguration,沿着Groovy或弹簧线。
我认为你会发现,你不需要像Objective C,Ruby,Lisp等后期绑定语言。 和Jamis的启示一样,当他尝试构build针时,他正在走上一个过于复杂的path, 重新访问了Ruby- Net :: SSH的DI框架。
这里有一些链接,希望能给你一些示例代码,在Objective C中做类似的事情。通过类别,你可以在运行时改变任何类的行为。 请参阅Mac开发人员提示 – Objective-C:类别和Cocoa API文档的类别 。 本质上,你不需要一些中心的地方来要求“可以configurationx的东西”,因为你可以直接实例化TheThingThatDoesX,如果其他东西需要改变/挂钩到那个行为,它可以使用类别。
AtomicObject 反对 。 它是在Guice的形象塑造。
我会出去的一个肢体,并就此发表意见。 顶级答案描述的dependency injection并不能解决那些试图使用它的核心问题。 我们希望有一种开发方式,其中组件A不直接实例化或引用组件B.组件A被协议绑定到组件B,并且完全不被组件A引用。这允许组件B在任何时候被replace,而没有触摸组件A.我投了票,但我会研究你的参考,因为它似乎有几个人同意你。 我不是在辩论,只是想学习。 我想了解更多关于“不需要这样做”的方法。
台风
差不多一年前,我发布了: https : //github.com/typhoon-framework/Typhoon
台风网站列出了主要function。 快速总结:
-
非侵入性。 不需要macros或XML。 使用强大的Objective-C运行时方法 。
-
使具有相同基类或协议的多个configuration变得容易。
-
没有魔术string – 支持IDE重构,代码完成和编译时检查。
-
支持视图控制器和故事板集成的注入。
-
支持初始化和属性注入,以及生命周期pipe理。
-
强大的内存pipe理function。 提供预先configuration的对象,没有单例的内存开销。
-
对循环依赖的优秀支持。
-
靠。 它占用的空间非常小,所以适用于CPU和内存受限的设备。
-
经过testing – 用于各种Appstore特色的应用程序
-
一个国际分布的核心团队(我们甚至监控StackOverflow),所以你的任何问题的支持是永远不会离开:)
API文档和示例应用程序
- API文档: http : //www.typhoonframework.org/docs/latest/api/
- 我们有一个很好的示例应用程序: https : //github.com/jasperblues/Typhoon-example
质量控制:
我们还保持一个强大的质量控制体系。
- 每个提交都会触发一系列的回归testing
- 我们保持高testing覆盖率。
您不必在NIB文件中实例化对象。 如果将文件所有者设置为对象的类,然后将视图/窗口中的任何东西链接起来,则可以通过手动加载nib文件将对象设置为运行时的所有者。 这样你可以有一个对象的dynamic实例,依然注入正确的依赖。
Objective-IOC的dependency injection实现如何?
那么ObjectivePim呢? ObjectivePim
我写了一个非常简单的DI容器,代码在GitHub上 。 它只能做最基本的,即。 发现一个对象的依赖关系,并使用其他给定的对象来满足它们。 我发现要在现实世界的应用程序中使用,代码非常简单,而且很有趣。
有没有看过Mac OS X 10.6的关联引用function?
我相信这样做有可能build立或已经有类似于DI的东西。 据我所见,对象中所需的任何引用都必须使用objc_getAssociatedObject()手动获取。
曼弗雷德
Interface Builder不执行任何dependency injection。 它不需要。 Interface Builder序列化对象。 当一个笔尖被“唤醒”(又名打开),没有“依赖”来解决 – 只有属性可以设置。 非常,非常简单。 打开笔尖只依赖于NSCoding协议和键值编码。
在编写好的Objective-C代码中,dependency injection,在最好的时候几乎是一个make-work项目,或者最好是独立devise的组件之间的通用粘合层。 你正在寻求一个你不需要的工具。
在Objective-C中,需要匿名服务的软件声明一个协议。 服务然后采用这个协议。 客户端将服务加载为dynamic插件。 另一方面,如果服务器是在客户端之前编写的,那么写一个新的插件就可以使现有的接口适应协议。 这是比尝试定义一个中间数据驱动系统在运行时“发现”(请)接口更简单,更直接的方法。
对于每个人来说,DI的重要秘诀在于它是用XML而不是用母语编写代码的方式吗? 我真的很想听到一个很好的论点,就像XML是一种比真正的编程语言更好的编程语言。 这没有任何意义。
我整天和Spring一起工作,并且检查了Groovy。 我绝不是一个XCode / Cocoa专家,但是IB只做了一些dependency injection,Groovy甚至没有声称这么做。
我认为你不是在寻找DI,而是为了编写一套完整的集成库,从而避免input许多其他人也可以input的代码。 我认为没有像cocoa的Spring框架,因为由于某些原因,人们倾向于将“开放源码”看作“不依赖于平台”,因此Cocoa有点被冷落了。
根据你的需要,有一些很好的免费开源库cocoa,都列在CocoaDev的一个不错的列表中 。
我知道这不是spring,但我希望它有帮助。
DI是需要dynamic绑定的运行时执行环境的属性。 我对Obj-C和Cocoa很陌生,所以我可能会反过来说话。 除非我错过了一些东西,否则除了解释Obj C而不是编译它,或者修改运行时环境外,我不知道如何实现DI。
我怀疑IB的类似于DI的行为是因为有一个特定于域的运行时环境与其构build的应用程序相关联。
我很高兴能够改正。
分类似乎是一个mixin的实现,允许dynamic分配方法给委托。 相当酷和Java的接口概念类似,认为细节不同,从以下,我不能看到常量可以在一个类别中定义,虽然成员字段不能。
目标-c类别
- 在Swift中重新初始化一个懒惰的初始化variables
- setValue:forUndefinedKey:这个类不是密钥编码兼容的密钥
- 有了ARC,有什么更好的:alloc或autorelease初始化器?
- Xcode构build失败“架构x86_64的未定义符号”
- 当他们说一个NSManagedObjectContext被创build它的线程或队列拥有时,苹果是什么意思?
- 在我的iPhone应用中将string转换为date
- 为什么unit testing内部的代码不能findbundle资源?
- 为什么最后要调用super-dealloc,而不是先调用?
- 从一位数的整数中创build一个两位数的string