从程序集内部修补 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
我正在尝试从程序集(或不同的程序集)中修补程序集。
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