[英]Objective-C, Typhoon, passing an Assembly as a parameter
在我使用 Typhoon 庫的應用程序中,我創建了一個AppAssembly ,它在SceneDelegate中被初始化,如下所示:
self.appAssembly = [[AppAssembly new] activated];
我的appAssembly看起來像這樣
- (Person *)me;
- (Dog *)dog;
- (Cookie *)cookie;
- (DogInteractionVC *)dogVC;
- (HowManyCookiesVC *)howManyCookiesVC;
我想從SceneDelegate過渡到dogVC ,然后從dogVC過渡到howManyCookiesVC
從SceneDelegate調用dogVC的實例非常簡單,因為我可以訪問它:
self.viewController = [self.appAssembly dogVC];
我不明白如何將相同的appAssembly實例傳遞給dogVC ,然后再傳遞給 howManyCookiesVC 。 當我嘗試在dogVC中創建AppAssembly的實例時,我遇到了我認為稱為循環依賴的問題。
GitHub 上有一個關於注入程序集本身的指南。 所以我在TyphoonComponentFactory類型的dogVC 中創建了一個屬性 appAssembly 。 這是我在appAssembly中為dogVC初始化的方法如下所示:
- (DogInteractionVC *)dogVC {
return [TyphoonDefinition withClass:[DogInteractionVC class]
configuration:^(TyphoonDefinition *definition) {
[definition useInitializer:@selector(initWithPerson:)
parameters:^(TyphoonMethod *initializer) {
[initializer injectParameterWith:[self me]];
}];
[definition injectProperty:@selector(appAssembly) with:self];
}];
}
我認為部分injectProperty:@selector(appAssembly)是錯誤的,但我花了很長時間才理解這一點,而且如果沒有社區的幫助,恐怕我不能再進一步 go。 任何幫助表示贊賞。 謝謝你。
旁注:親愛的社區,我非常接近被禁止發帖,因為我最近的帖子沒有受到好評。 我相信這個問題有它需要的一切。 如果我錯了,請在豎起大拇指之前讓我知道,以便我理解我的錯誤。 謝謝你。
依賴注入:
Typhoon 有助於應用依賴注入模式 - 一種面向 object 的軟件方法,其中:
這樣:
在移動應用程序中使用依賴注入:
當我們在移動應用程序中使用依賴注入時,我們從應用程序委托開始啟動視圖 controller。
工廠模式:
要從一個 controller 過渡到另一個,我們可以使用 Typhoon 作為發射構建實例的工廠。 工廠模式允許我們:
因此,要從一個視圖 controller 過渡到另一個視圖,我們可以注入 Typhoon 組件用作工廠以獲得下一個視圖 controller。 要將程序集作為工廠注入,文檔在這里。
范圍:
根據導航風格,控制器通常會保留在 memory 只要使用然后釋放。 同時將共享服務或其他共享基礎設施。
TyphoonScopeObjectGraph
definition.scope = TyphoonScopeSingleton
,如此處所述。朝聖:
至少在我看來,Typhoon 是 objective-C 最好和最靈活的 DI 庫。 同時,如果您使用 Swift,您可能想嘗試更簡單更好的: pilgrim.ph
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.