如何正确使用设计注入快速

时间:2017-02-22 14:54:43

标签: swift dependency-injection typhoon

我们正在构建一个功能强大的电子商务应用程序。我们使用的设计模式之一是设计注射。典型的视图控制器工厂方法看起来像

    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())      
        })   
    }

面临的问题:

  1. 现在像页脚视图这样的UIViews非常特定于这个视图控制器,并且在其他任何地方都没有使用,但仍然被注入。

  2. 许多装配已经创建,所有装配相互注入都难以理解。

  3. 当前用户正在coreAssembly中创建,即使用户未登录并且正在创建空当前用户。

  4. 我想了解如何正确使用设计注射的一些技巧,所以我不会遇到这些问题。

0 个答案:

没有答案