我们正在构建一个功能强大的电子商务应用程序。我们使用的设计模式之一是设计注射。典型的视图控制器工厂方法看起来像
public dynamic func leadListingViewController() -> AnyObject {
return TyphoonDefinition.withFactory(self.leadsStoryBoard(), selector: #selector(UIStoryboard.instantiateViewControllerWithIdentifier(_:)),
parameters: { (factoryMethod) -> Void in
factoryMethod.injectParameterWith("leadListingViewController")
}, configuration: { (definition) -> Void in
definition.injectProperty(#selector(CoreAssembly.analyticsLogger), with:self.coreAssembly?.analyticsLogger())
definition.injectProperty(NSSelectorFromString("leadAssembly"), with:self)
definition.injectProperty(#selector(CoreAssembly.currentUser), with:self.coreAssembly?.currentUser())
definition.injectProperty(NSSelectorFromString("applicationAssembly"), with:self.applicationAssembly)
definition.injectProperty(NSSelectorFromString("managedObjectContext"), with:self.coreAssembly?.managedObjectContext())
definition.injectProperty(#selector(CoreAssembly.leadFeedStatusOperation), with:self.coreAssembly?.leadFeedStatusOperation())
definition.injectProperty(#selector(MonetizationAssembly.walletFlowController), with: self.monetizationAssembly?.walletFlowController())
definition.injectProperty(#selector(LeadAssembly.leadsFlowController), with: self.leadsFlowController())
definition.injectProperty(NSSelectorFromString("footerView"), with: self.footerView())
})
}
面临的问题:
现在像页脚视图这样的UIViews非常特定于这个视图控制器,并且在其他任何地方都没有使用,但仍然被注入。
许多装配已经创建,所有装配相互注入都难以理解。
当前用户正在coreAssembly中创建,即使用户未登录并且正在创建空当前用户。
我想了解如何正确使用设计注射的一些技巧,所以我不会遇到这些问题。