Typhoon DI:有没有办法在运行时通过 class 名称查找程序集?

Typhoon DI: Is there any way to find an assembly by class name at runtime?

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

谢谢。

编辑:

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

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

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

谢谢!

Typhoon 中的程序集有两个用途:

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

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

(旁注:在 Typhoon 中很容易声明同一类型的多个 actor)。

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

这意味着:

  • 只要给出所有构建实例的规则,TyphoonComponentFactory就可以构建它们。
  • (仅 Objective-C):您可以将任何 TyphoonComponentFactory 实例转换为您的程序集接口之一并调用其上的方法。如果存在构建与方法名称(和任何参数)匹配的实例的规则,则将返回该实例,否则将引发 'no component for key'。

此信息是一般性信息 - 我怀疑如果您知道事情在幕后是如何工作的,您就会知道您可以做哪些事情,以及哪些方法是合适的。如果您想要更多细节,请编辑您的问题,我会提供。