使用Typhoon依赖注入,有没有办法,常规或黑客,在运行时通过它的类名来查找程序集? 我需要从一个程序集中的文件加载配置,该配置将告诉我使用哪些其他程序集来生成当前程序集中所需的一些组件。此外,我没有所有程序集代码(类)可用,因为我正在处理可重用(库)代码,因此它需要是动态的并且在运行时。 有什么办法吗?
感谢。
编辑:
我试图做的事情有点矛盾。我想从一个初始程序集中访问其他初始程序集,而所有这些程序集都处于初始化过程中(调用swizzled setAppDelegate时,将读取plist TyphoonInitialAssemblies并创建程序集)。此时没有激活装配。
但是,通过使用类名[[NSClassFromString(assemblyClassName)alloc] init]实例化程序集并在返回的对象上执行选择器,设法以一种奇怪的方式执行此操作。只要该组件已经初始化(在plist中首先出现),它就可以工作。所以,重复一遍,所有这些都发生在初始程序集创建期间(swizzled setAppDelegate)。
我只是不确定这种方法是否安全?
谢谢!
答案 0 :(得分:1)
Typhoon中的程序集有两个目的:
在构建时,所有信息都进入TyphoonComponentFactory
,这是能够生成实例的内容。在这个类中,有一些方法可以按类型或按键检索组件 - 其中key是来自其中一个程序集类的方法名称。
(旁注:在Typhoon中,很容易声明多个相同类型的演员)。
然后,为了避免使用魔术字符串'程序集(只是接口)可以充当TyphoonComponentFactory
前面的外观来检索实例。这里发生的是使用Objective-C消息转发。
这意味着:
TyphoonComponentFactory
就可以构建它们。 TyphoonComponentFactory
实例强制转换为其中一个程序集接口并在其上调用方法。如果有规则来构建与方法名称(以及任何args)匹配的实例,那么它将被返回,否则'没有用于键的组件'被提出来了。 这些信息属于一般性质 - 我怀疑,如果你知道幕后的工作方式,你就会知道你可以做的事情以及适当的方法。如果您想了解更多细节,请编辑您的问题,我会提供。