我无法理解台风使用的术语 documentation 。
看来您基本上定义了一个 TyphoonAssembly
并且它包含所有对象。然后创建一个或多个 TyphoonDefinition
来描述如何实例化该对象。我假设这些定义是在实现中执行的。但是,这些 TyphoonDefinition
位于文档的注入(inject)类型
部分。
当使用其他 iOC 容器(例如 Spring)时,术语注入(inject)是指将构造的组件提供给依赖对象的过程,而不是注入(inject)到 iOC 容器本身。
我对文档的理解是否错误,或者术语的使用方式是否不同?
最佳答案
如果它可以帮助您将 Typhoon 与 Spring 进行比较,您可以将 TyphoonDefinition
视为 Spring bean:构建对象的蓝图,带有要使用的初始化程序,以及任何要调用的属性 setter 或方法。
像 Spring 一样,您可以提供对另一个组件的引用或注入(inject)简单的配置。
同样,像 Spring 一样,您可以选择将相关组件组合在一起。
事实上,Typhoon 的内部模型与 Spring 非常相似,有后处理器等(创始人——也就是我——是 Spring 框架贡献者,曾在 SpringSource 工作过一段时间)。不同的是:
- Typhoon 程序集在构建时返回定义。
- 在运行时,装配接口(interface)用于返回构建的组件。这避免了使用“魔术字符串”
- 同样,对其他组件的引用不需要“魔术字符串”——而是使用方法名称。
TyphoonDefinition
可以声明它们具有静态和运行时依赖关系的混合,后者在程序集接口(interface)上声明。这提供了一种快速而强大的方法来实现工厂模式,并避免编写样板代码。
主要理由是允许 IDE 重构和代码完成,而无需构建额外的工具支持。
其他一些差异:
“按类型注入(inject)”( Autowiring )仅适用于属性(ObjC 运行时不会为初始化器或方法参数保留此信息)。
Typhoon 提供了专为移动和桌面软件设计的默认范围。
您可能已经看到过一些示例,其中定义已注入(inject)程序集本身。这与 Spring 的 BeanFactoryAware 类似,无需显式地将代码耦合到 Typhoon(非侵入式)。它允许从一个对象图(例如 View Controller )转到另一个对象图 - 这是移动和桌面应用程序中的常见要求。
最后,Spring 及其组合产品的基础一方面是“依赖注入(inject)”,另一方面是“AOP”(用于事务管理、安全性等)。目前,Typhoon 只进行依赖注入(inject),尽管我们认为正式的 AOP 框架以及切入点表达式语言会很有用。
Typhoon 的早期版本允许 Spring 风格的 XML,但是这在 Objectives-C 开发人员中并不是一个流行的功能。
关于台风入门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26466902/