簡體   English   中英

iOS Typhoon DI框架將取代Objective-C中的單例

[英]iOS Typhoon DI framework to replace singleton in objective-c

我正在使用帶Firebase身份驗證的基於Storyboard / objective-c的iOS應用程序。 我使用Cloud Firestore保存用戶數據-年齡,性別等。當用戶到達應用程序時,我檢查用戶是否已登錄(以下)

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

用戶登錄后,他們可以導航到應用程序的其他部分,否則他們將看到注冊/登錄頁面。

外觀導航到不同的視圖通常意味着我必須調用上面的代碼來再次確定已登錄狀態-我不想這樣做。 我想創建一個具有登錄用戶和來自Firestore的數據的用戶對象,並將其在視圖控制器之間傳遞。

辛格爾頓(Singleton)似乎做得很好,並且很適合我的情況,但是我遇到了台風!

第一個問題是,使用該框架是否還可以? 似乎有些不活躍,但技術卻非常驚人。

其次,這是我的實現-我有一個看起來像這樣的程序集

- (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. 將程序集設為默認

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

第一個問題是,使用該框架是否還可以? 似乎有些不活躍,但技術卻非常驚人。

回答:

台風仍然是Objective-C依賴注入庫的最佳選擇。 它功能齊全,因此通常不添加新功能,但是由AppsQuick.ly維護和支持。

如果您正在使用Swift, Fiery Crucible是一個出色的DI框架。 它具有Typhoon的大多數功能,易於使用,並且沒有其他Swift框架的缺點。

為了在不同的視圖中獲得相同的啟動類,我需要執行以下操作:

  1. 在組件中使用TyphoonScopeSingleton作為definition.scope
  2. 將程序集設為默認

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

回答:

這不是正確的方法。 這個想法是讓一個 Typhoon實例在composition root上創建,然后在運行(前景或背景停止)應用程序的整個生命周期中與您的應用程序一起生活。

  • 我們不要求Typhoon提供依賴關系,而是告訴它將依賴關系注入到控制器,服務或其他類中。
  • 唯一的例外是使用factory模式時 ,其中我們混合了靜態依賴項和運行時參數,例如:“給我該用戶的訂單視圖控制器”。 在這種情況下,我們將注入裝配本身。

對於iOS,Typhoon提供了一種在啟動時引導程序集的方法,無論有無故事板。 示例顯示了如何執行此操作,以及故事板上的指南

如果您在嘗試上述資源后仍遇到其他障礙,請詢問另一個具體問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM