从程序集内部修补 Typhoon 程序集

Patch Typhoon Assembly from inside an Assembly

我正在尝试从程序集(或不同的程序集)中修补程序集。

https://github.com/appsquickly/Typhoon/wiki/Integration-Testing#patching-out-a-component 中描述的方法工作得很好,但在多个应用程序中重复使用相同的程序集时有点复杂,同时试图只修补某些方面。我知道我可以模块化我的装配结构来完成这件事,但我要重复一遍,对于所有未修补的定义。子类化可能是另一种选择,但我需要对很多定义进行子类化,只是为了改变一个方面。

简而言之:我正在尝试将它移到我的程序集中:

MiddleAgesAssembly* assembly = [[MiddleAgesAssembly assembly] activate];
TyphoonPatcher* patcher = [[TyphoonPatcher alloc] init];

[patcher patchDefinitionWithSelector:@selector(knight) withObject:^id{
  return [assembly anotherKnight];

}];

[assembly attachPostProcessor:patcher];

一个可能的解决方案(我还没有尝试过)可能是创建我自己的 TyphoonDefinitionPostProcessor 实现。但是在实施之前,我想问一下,是否有人对一般问题有一个优雅的解决方案。

虽然有更多解决方法值得赞赏,但我更想知道,是否可以从另一个程序集中修补该程序集。

谢谢,马丁

无法从另一个程序集修补一个程序集 - 目前不支持此功能。

但是,如果您想要创建可重复使用的程序集并只修补某些部分,您可以创建一个子 class 来仅覆盖您想要客户使用的部分。

假设您有一个带有协作程序集的顶级程序集,如下所示:

@interface MiddleAgesAssembly : TyphoonAssembly

@property(strong, nonatomic, readonly) QuestProvider *questProvider;

@end

激活程序集时,您可以指定将覆盖基础程序集的任何程序集,如下所示:

[MyAssembly new] activateWithCollaboratingAssemblies:@[HolyGrailQuestProvider new]];
//HolyGrailQuestProvider will act in place of the base quest provider