我试图弄清楚如何在创建单例时将运行时参数注入到单例中,然后从那时起记住这些参数。不过,我不确定运行时参数的接口是否可以支持这一点。比如说,我有一个需要令牌的 Client 对象,并且具有以下初始化程序:
+ (instancetype)initWithToken:(NSString *)token;
令牌是在运行时从服务器获取的,对于每个用户来说都是不同的,所以我不能简单地将 NSString 放在定义中。因此,我在 Typhoon 程序集上创建了以下方法:
- (Client *)clientWithToken:(NSString *)token;
但是,将来(当我将此客户端注入其他类时),我将没有手头的令牌来调用此方法。因此,例如,我希望能够注入[self client]
。由于客户端是单例并且已经创建,因此无论如何都不需要令牌。
但是,我似乎无法找到一种方法来做到这一点。显然,定义一个单独的调用方法client
只会返回一个不同的客户端。如果客户端已经存在,我可以直接调用clientWithToken:nil
并且参数将被忽略吗?也许遍历程序集的singletons
数组会起作用,但这显然很不雅。
我考虑过按类型注入(所以我不需要调用方法),但是我有多个相同类型的不同客户端,所以我需要明确说明要注入哪个客户端。当然,也可以选择从初始化程序中删除此参数,而是将其设置为程序集外部的属性;但是这种模式在我们的整个应用程序中都使用过,所以我想避免重写那么多代码。
谢谢你。