Typhoon DI:有没有办法在运行时按类名查找程序集?

时间:2016-09-08 15:53:22

标签: typhoon

使用Typhoon依赖注入,有没有办法,常规或黑客,在运行时通过它的类名来查找程序集? 我需要从一个程序集中的文件加载配置,该配置将告诉我使用哪些其他程序集来生成当前程序集中所需的一些组件。此外,我没有所有程序集代码(类)可用,因为我正在处理可重用(库)代码,因此它需要是动态的并且在运行时。 有什么办法吗?

感谢。

编辑:

我试图做的事情有点矛盾。我想从一个初始程序集中访问其他初始程序集,而所有这些程序集都处于初始化过程中(调用swizzled setAppDelegate时,将读取plist TyphoonInitialAssemblies并创建程序集)。此时没有激活装配。

但是,通过使用类名[[NSClassFromString(assemblyClassName)alloc] init]实例化程序集并在返回的对象上执行选择器,设法以一种奇怪的方式执行此操作。只要该组件已经初始化(在plist中首先出现),它就可以工作。所以,重复一遍,所有这些都发生在初始程序集创建期间(swizzled setAppDelegate)。

我只是不确定这种方法是否安全?

谢谢!

1 个答案:

答案 0 :(得分:1)

Typhoon中的程序集有两个目的:

  • 构建时间:在您的架构中声明关键角色以及它们如何与其他角色互动的地方。您可以在此处使用模块化以逻辑方式组织信息 - 通常用于反映分层体系结构。
  • 运行时:它们充当工厂,根据构建时声明的规则检索构建的实例。

在构建时,所有信息都进入TyphoonComponentFactory,这是能够生成实例的内容。在这个类中,有一些方法可以按类型或按键检索组件 - 其中key是来自其中一个程序集类的方法名称。

(旁注:在Typhoon中,很容易声明多个相同类型的演员)。

然后,为了避免使用魔术字符串'程序集(只是接口)可以充当TyphoonComponentFactory前面的外观来检索实例。这里发生的是使用Objective-C消息转发。

这意味着:

  • 只要给出构建实例的所有规则,TyphoonComponentFactory就可以构建它们。
  • (仅限Objective-C):您可以将任何TyphoonComponentFactory实例强制转换为其中一个程序集接口并在其上调用方法。如果有规则来构建与方法名称(以及任何args)匹配的实例,那么它将被返回,否则'没有用于键的组件'被提出来了。

这些信息属于一般性质 - 我怀疑,如果你知道幕后的工作方式,你就会知道你可以做的事情以及适当的方法。如果您想了解更多细节,请编辑您的问题,我会提供。