【问题标题】:Inject dependencies through initializers (using Storyboards)? [Swift]通过初始化程序注入依赖项(使用情节提要)? [迅速]
【发布时间】:2016-12-19 19:00:39
【问题描述】:

我想知道是否有一种方法可以不显式地通过设置器传递您的依赖对象。即设置器依赖项:

var store: Store!

这可以通过 VC 的初始化程序(instantiateViewControllerWithIdentifier)以某种方式完成,即使用情节提要的初始化程序注入吗? 谢谢

【问题讨论】:

    标签: swift dependency-injection initialization uistoryboard


    【解决方案1】:

    你可以引入一个额外的类,它负责配置你的 viewController。

    class MyViewControllerConfigurator {
    
        static func configure(viewController: MyViewController) {
    
            let someDependency = SomeDependency()
    
            viewController.someDependency = someDependency
    
            // force trigger lazy initialization of view (and subviews), which would be nil otherwize in awaikFromNib
            _ = viewController.view
    
            // do further configuration here (add child view controller, set delegates ...)
        }
    }
    

    MyViewController中的用法:

    class MyViewController: UIViewController {
    
        override func awakeFromNib() {
            super.awakeFromNib()
            MyViewControllerConfigurator.configure(viewController: self)
        }
    }
    

    这样,即使使用 Storyboard 实例化,您的 viewController 也会被配置。

    【讨论】:

    • 感谢您分享您的想法。实际上,我完全忘记了单例.. 有一段时间没有使用它们了。但是,单例在一般情况下是不是很糟糕,因为它们违反了单一责任原则?
    • 我同意避免 Singletons 是一件神事,因此虽然不是“单一责任原则”,但那是另一个话题。这只是一个可能的示例实现。我更新了答案。
    • @shallowThought 这不是依赖注入示例。您正在手动设置依赖项,并且没有将依赖项传递给目标。
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2018-01-15
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2013-07-08
    相关资源
    最近更新 更多