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类别