【问题标题】:What is the right way to store user data then inject it with Typhoon?存储用户数据然后将其注入 Typhoon 的正确方法是什么?
【发布时间】:2016-05-12 11:41:34
【问题描述】:

在我的 iOS 应用程序中,我有从网络加载并保存为普通 Objective-C 对象的用户数据,该对象将其数据保存到 NSUserDefaults。我需要能够注销当前用户并将其删除,然后登录一个新用户并开始在整个应用程序中使用该用户。现在它只是一个我正在调用UserManager 的单身人士,使用方法-(User)currentUser

我正在过渡到在我的 (http://typhoonframework.org) 中使用 Typhoon 框架进行依赖注入。存储用户数据的正确方法是什么?我知道我可以保留我的 UserManager 课程,通过 Typhoon 将其注入任何需要它的地方,并将其设置为 Typhoon 类型 definition.scope = TyphoonScopeSingleton;

但是如果我这样做,不还是只是一个单例吗?我知道它好一点,因为它被注入到类中,而不是隐藏在它们的实现中。但是,似乎应该有一种更好的方法来将 User 对象保留在某处并注入当前对象,而不是将其包装在带有 getter 的 [injected] 单例中。

谢谢。

【问题讨论】:

    标签: ios objective-c dependency-injection typhoon


    【解决方案1】:

    感谢您使用台风!

    如果我理解正确,您需要将 currentUser 注入到您的类中,例如:

    @implementation Assembly
    
    - (User *)currentUser
    {
        return [TyphoonDefinition withFactory:[self userManager] selector:@selector(currentUser)];
    }
    
    - (UserManager *)userManager
    {
        return [TyphoonDefinition withClass:[UserManager class] configuration:^(TyphoonDefinition *definition) {
            definition.scope = TyphoonScopeSingleton;
        }];
    }
    

    【讨论】:

    • 是的,我就是这么做的。我只是希望有某种方法可以完全避免使用单例用户管理器。可能没有办法,我只是想方圆。