簡體   English   中英

iOS 依賴注入(台風)

[英]iOS Dependencies injection (typhoon)

我找到了很好的教程,展示了依賴注入是如何工作的。

但我還是不明白我們需要它的目的是什么?

對我來說如何使用抽象是可以理解的,但我不明白我們需要下面這段代碼的目的是什么:

- (BNRItemsViewController *)itemsViewController {
  return [TyphoonDefinition withClass:[BNRItemsViewController class] configuration:^(TyphoonDefinition *definition) {
    [definition injectProperty:@selector(itemStore) with:[self store]];
  }];
}

- (id<BNRItemStore>)store {
  return [TyphoonDefinition withClass:[BNRItemStoreImpl class] configuration:^(TyphoonDefinition *definition) {
    [definition useInitializer:@selector(sharedStore) parameters:^(TyphoonMethod *initializer) {
      definition.scope = TyphoonScopeLazySingleton;
    }];
  }];
}

什么是itemsViewController以及如何調用它以及如何在不將其設置在外部的情況下獲取項目。

注射的主要目標是什么? 所以我可以看起來很簡單:

BNRItemsViewController *vc = ...
vc.itemStore = [BNRItemStore ...]

使用圖書館對我有什么好處?

Typhoon 為您提供了幾個優勢:

1) 在以下情況下:

BNRItemsViewController *vc = ...
vc.itemStore = [BNRItemStore ...]

您正在手動實例化視圖控制器,然后將 itemStore 設置為一個具體類 (BNItemStore),該類現在被硬編碼到該類和任何其他實例化 BNRItemsViewController 的類中。 但是 Typhoon 在初始化時會自動注入 itemStore 屬性,而不管初始化發生在哪里 即使 storyboard segue 初始化了 BNRItemsViewController 類(您的代碼中沒有手動實例化),它也會從初始化返回,並且 itemStore 屬性已經由依賴注入框架自動設置。 它將在每個實例化的地方注入相同的值,而無需您的代碼每次都將該屬性設置為硬編碼的具體類。

2) 您不必在一處或多處更改您的代碼來更改將 BNRItemStore 協議的具體實現傳遞給 BNRItemsViewController。 相反,您可以在 info.plist 中定義整個應用程序中將發生的具體注入集,您可以在其中指定將使用的 Typhoon 程序集。 這意味着您可以擁有一個測試程序集、一個暫存程序集、一個生產程序集,並擁有在整個應用程序中注入的每個場景所需的所有適當依賴項,從一個位置進行控制,而不是硬編碼到您的實際源代碼中. 換句話說,您可以在不接觸源代碼的情況下,根據應用程序運行的上下文類型(測試、開發、發布等)更改將用於任何給定應用程序構建的依賴項的整個圖表。 )

暫無
暫無

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

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