• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iOS Typhoon DI 框架替换 Objective-c 中的单例

[复制链接]
菜鸟教程小白 发表于 2022-12-11 22:19:16 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在开发一个基于 Storyboard/objective-c 的 iOS 应用程序,并带有 firebase 身份验证。我使用 Cloud Firestore 来保存用户数据 - 年龄、性别等。当用户访问应用程序时,我会检查用户是否已登录以下(类似)代码

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

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

它的外观导航到不同的 View 通常意味着我必须调用上面的代码来再次确定登录状态——我不想这样做。我想使用登录用户和来自 firestore 的数据创建一个用户对象,并在 View Controller 之间传递它。

Singleton 似乎做得很好,并且非常适合我的情况,但我遇到了 Typhoon!

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

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

- (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];

要在不同的 View 中获得相同的启动类,我需要执行以下操作:

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

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



Best Answer-推荐答案


First question is, is it still ok to use that framework? Seems a little inactive, but very amazing technology though.

答案:

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

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

To obtain the same initiated class in different views seems like I need to do the following:

  1. use TyphoonScopeSingleton as definition.scope in the assembly
  2. make the assembly default

I am wondering if someone could provide me with some guidance regarding this.

答案:

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

  • 我们不会向 Typhoon 询问依赖项,而是告诉它将依赖项注入(inject)到 Controller 、服务或其他类中。
  • 唯一的异常(exception)是使用 factory pattern ,其中我们混合了静态依赖项以及运行时参数,例如:“给我这个用​​户的订单 View Controller ”。在这种情况下,我们注入(inject)程序集本身。

对于 iOS,Typhoon 提供了一种在启动时 Bootstrap 集的方法,无论有没有 Storyboard。 sample显示如何做到这一点,以及 this guide在 Storyboard上。

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

关于iOS Typhoon DI 框架替换 Objective-c 中的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54950554/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap