iOS Typhoon DI框架在objective-c中替换singleton

问题描述 投票:2回答:1

我正在使用firebase身份验证开发基于storyboard / objective-c的iOS应用程序。我使用云firestore来保存用户数据 - 年龄,性别等。当用户到达应用程序时,我检查用户是否登录了以下(类似)代码

FIRUser *firUser = [FIRAuth auth].currentUser;
if (firUser) {
    // user logged in 
    // fetch updated user date from cloud firestore 
} else {
    // NO logged in user 
}

当用户登录时,他们可以导航到应用程序的其他部分,否则他们会看到注册/登录页面。

它的外观导航到不同的视图通常意味着我必须调用上面的代码再次找出登录状态 - 我不想这样做。我想创建一个用户对象,其中包含来自firestore的登录用户和数据,并在视图控制器之间传递它。

辛格尔顿似乎做得很好,对我的情况很理想,但我遇到了台风!

第一个问题是,使用该框架仍然可以吗?似乎有点不活跃,但非常惊人的技术。

其次这是我的实现 - 我有一个看起来像这样的程序集

- (AuthenticatedUser*)authenticatedUser {
    return [TyphoonDefinition withParent:[self user] class:[AuthenticatedUser class] configuration:^(TyphoonDefinition* definition){

        definition.scope = TyphoonScopeSingleton;
    }];
}

这就是我获取AuthenticatedUser实例的方式

ModelsAssembly *modelsAssembly = [ModelsAssembly defaultAssembly];

// no default ModelsAssembly set
if( modelsAssembly == nil ){
    modelsAssembly = [[ModelsAssembly new] activated];
    [modelsAssembly makeDefault];
}

authenticatedUser = [modelsAssembly authenticatedUser];

要在不同的视图中获得相同的启动类似乎我需要执行以下操作:

  1. 使用TyphoonScopeSingleton作为程序集中的definition.scope
  2. 使程序集默认

我想知道是否有人可以就此提供一些指导。

ios objective-c dependency-injection typhoon
1个回答
0
投票

第一个问题是,使用该框架仍然可以吗?似乎有点不活跃,但非常惊人的技术。

回答:

Typhoon仍然是Objective-C的依赖注入库的最佳选择。它功能齐全,因此通常不会添加新功能,但它由AppsQuick.ly维护和支持。

如果您正在使用Swift,Fiery Crucible是一个优秀的DI框架。它具有Typhoon的大部分功能,易于使用,并且没有其他一些Swift框架的缺点。

要在不同的视图中获得相同的启动类似乎我需要执行以下操作:

  1. 使用TyphoonScopeSingleton作为程序集中的definition.scope
  2. 使程序集默认

我想知道是否有人可以就此提供一些指导。

回答:

这不是正确的方法。想法是在composition root创建一个Typhoon实例,然后它将与您的应用程序一起生活在运行(前景或后置)应用程序的生命周期中。

  • 我们不询问Typhoon的依赖关系,我们告诉它将依赖关系注入控制器,服务或其他类。
  • 唯一的例外是当使用factory pattern时,我们有混合的静态依赖项,以及运行时参数,例如:“给我这个用​​户的订单视图控制器”。在这种情况下,我们注入组件本身。

对于iOS,Typhoon提供了一种在启动时引导程序集的方法,无论是否有故事板。 sample在故事板上展示了如何做到这一点以及this guide

如果您在尝试上述资源后遇到其他障碍,请询问另一个具体问题。

© www.soinside.com 2019 - 2024. All rights reserved.