使用Swinject时如何将参数传递给resolve方法?

mat*_*ace 5 dependency-injection ios swift swinject

我有一个测试项目,我试图将参数传递给Swinject项目中的resolve方法.

这是我的Swinject故事板扩展文件中包含的示例.

import Swinject

extension SwinjectStoryboard {

    class func setup() {

        let mainDm = MainDM()

        defaultContainer.register(MainDM.self) { _ in
            mainDm
        }

        defaultContainer.registerForStoryboard(ViewController.self) { r, c in
            c.dm = r.resolve(MainDM.self)
            c.container = defaultContainer

        }


        defaultContainer.register(GetMessageAction.self) { _, delegate in
            GetMessageAction(dm:mainDm, delegate: delegate)
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

在我的ViewController中,我正在尝试执行以下操作来解决GetMessageAction

@IBOutlet weak var myText: UILabel!

    var dm:MainDM!
    var container:Container!

    override func viewDidLoad() {
        super.viewDidLoad()

        NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: #selector(ViewController.getMessage), userInfo: nil, repeats: false)

    }

    func getMessage() {

        let action:GetMessageAction? = container.resolve(GetMessageAction.self, argument: self)!
        action?.execute()

    }
Run Code Online (Sandbox Code Playgroud)

当我的getMessage函数运行时,我收到以下消息

致命错误:在展开Optional值时意外发现nil

Yoi*_*aya 0

使用 Storyboard 的以下任一方法来获取由 注册的视图控制器registerForStoryboard

  • instantiateViewControllerWithIdentifier
  • instantiateInitialViewController

https://github.com/Swinject/Swinject/blob/v1/Documentation/Storyboard.md https://github.com/Swinject/SwinjectStoryboard/issues/5