Objective c Cocoa的依赖注入框架?

Objective c Cocoa的依赖注入框架?,objective-c,cocoa,dependency-injection,Objective C,Cocoa,Dependency Injection,Interface Builder可以用于Cocoa应用程序中的基本依赖项注入,但是当您不想在NIB文件中实例化对象时,有人知道Objective-C/Cocoa的更完整的依赖项注入框架吗 编辑 为了澄清,我承认IB可以用于基本DI,但我正在寻找一个功能更完整的框架,包括单独的生产和测试配置,与Groovy或Springs类似。您不必在NIB文件中实例化对象。如果您将文件的所有者设置为对象的类,然后在视图/窗口/任意位置链接,那么您可以通过手动加载nib文件在运行时将对象设置为所有者。这样,您就

Interface Builder可以用于Cocoa应用程序中的基本依赖项注入,但是当您不想在NIB文件中实例化对象时,有人知道Objective-C/Cocoa的更完整的依赖项注入框架吗

编辑


为了澄清,我承认IB可以用于基本DI,但我正在寻找一个功能更完整的框架,包括单独的生产和测试配置,与Groovy或Springs类似。

您不必在NIB文件中实例化对象。如果您将文件的所有者设置为对象的类,然后在视图/窗口/任意位置链接,那么您可以通过手动加载nib文件在运行时将对象设置为所有者。这样,您就可以拥有一个对象的动态实例,该实例仍然能够正确地注入依赖项。

我整天都在使用Spring,并且我已经检查了Groovy。我绝对不是XCode/Cocoa专家,但IB只做了一些依赖注入,Groovy甚至没有真正声称要做这些

我认为您不是在寻找DI,而是在寻找一套编译良好的集成库,它可以避免您键入其他人也键入的大量代码。我认为Cocoa没有类似Spring的框架,因为出于某种原因,人们倾向于将“开源”视为“不依赖于平台”,因此Cocoa被冷落了一点

不过,根据您的需要,有一些很好的免费开放源码库可供Cocoa使用,它们都列在CoCooadev的


我知道它不是Spring,但我希望它能有所帮助。

我想您会发现,在Objective C、Ruby、Lisp等后期绑定语言中不需要它。就像Jamis透露的,当他试图构建Pinele(Ruby的DI框架)时,他正在走一条过于复杂的道路


下面是一些链接,希望能为您提供一些在Objective C中执行类似操作的示例代码。使用类别,您可以在运行时基本上更改任何类的行为。请参阅和。本质上,您不需要一些中心位置来请求可配置的“做x的事情”,因为您可以直接实例化做x的事情,如果其他事情需要更改/挂接到该行为中,它可以使用类别。

DI是需要动态绑定的运行时执行环境的属性。我对Obj-C和Cocoa很陌生,所以我可能会不合时宜地发言。除非我遗漏了一些东西,否则我不知道如何实现DI,除非通过解释Obj C而不是编译它,或者通过修改运行时环境

我怀疑IB类似DI的行为是因为有一个特定于域的运行时环境与使用它构建的应用程序相关联

不过我很高兴被纠正

类别似乎是mixin的实现,允许将方法动态分派给委托。非常酷,与Java的接口概念类似,虽然细节不同,但我看不出是否可以在类别中定义常量,尽管成员字段不能

有人看过Mac OS X 10.6的功能吗

我相信有了它,就有可能构建或已经拥有类似于DI的东西。 然而,据我所知,对象中需要的任何引用都必须使用objc_getAssociatedObject()手动获取


Manfred

我已经编写了一个非常简单的DI容器,代码是on。它只能做简单的基础工作,即发现对象的依赖关系,并使用其他给定对象满足它们。我发现,要在现实世界的应用程序中使用,代码非常简单,而且很有趣。

Interface Builder不进行任何依赖项注入。它不需要这样做。接口生成器序列化对象。当一个nib被“唤醒”(也称为打开)时,没有“依赖关系”需要解决——只有属性需要设置。非常非常简单。打开nib完全依赖于NSCoding协议和键值编码

依赖项注入,在最好的时候几乎是一个make-work项目,或者充其量是独立设计的组件之间的通用粘合层,在编写良好的Objective-C代码中是没有用的。你想要的是一个你不需要的工具

在Objective-C中,需要匿名服务的软件声明一个协议。然后服务采用此协议。客户端将服务作为动态插件加载。另一方面,如果服务器是在客户端之前编写的,那么只需编写一个新的插件,使现有接口适应协议即可。这比试图定义一个中间数据驱动系统来在运行时“发现”(请)一个接口要简单得多


不是每个人都清楚DI的大秘密就是它是一种用XML而不是本机语言编写代码的方法吗?我真的很想听到一个很好的论点,说明XML是一种比真正的编程语言更好的编程语言。它没有任何意义。

由AtomicObject创建。它是按照Guice的形象塑造的。

我要站出来谈谈这个问题。顶部答案中描述的依赖注入并没有解决那些寻求使用它的人所面临的核心问题。我们希望有一种开发方式,组件a不直接实例化或引用组件B。组件a受组件B协议的约束,并且完全不被组件a引用。这允许组件B随时被替换,而不必触及组件a。我投了反对票,但我会研究您的引用有几个人同意你的观点。我不是想辩论,只是想学习。我想了解更多关于“不,你不需要那样做”的方法。

那么ObjectivePim呢?
台风

阿尔莫斯