2016-12-17 2 views
1

Ich habe mich gefragt, ob es eine Möglichkeit gibt, nicht explizit Ihr Abhängigkeitsobjekt durch Setter übergeben zu müssen. d.h Setter Abhängigkeiten:Inject Abhängigkeiten durch Initialisierungen (mit Storyboards)? [Swift]

var store: Store! 

Kann man das irgendwie durch den initializer (instantiateViewControllerWithIdentifier) ​​VC durchgeführt werden, das heißt initializer Injektion mit storyboards? Danke

Antwort

0

Sie könnten eine zusätzliche Klasse einführen, die für die Konfiguration Ihres ViewControllers verantwortlich ist.

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

Verwendung in MyViewController:

class MyViewController: UIViewController { 

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

Auf diese Weise Ihre Viewcontroller selbst konfiguriert wird bei der Verwendung von Storyboard instanziiert.

+0

Vielen Dank für Ihre Gedanken. Ich habe wirklich Singletons wirklich vergessen .. Benutze sie seit einer Weile nicht mehr. Aber sind Singles im Allgemeinen nicht schlecht, da sie das Prinzip der einheitlichen Verantwortung verletzen? –

+0

Ich stimme zu, Singletons zu vermeiden ist eine Gott Sache, der Grund ist daher nicht "Single-Verantwortung-Prinzip" obwohl, aber das ist ein anderes Thema. Dies war nur eine mögliche Beispielimplementierung. Ich habe die Antwort aktualisiert. – shallowThought

+0

@shallowThought Dies ist kein Beispiel für eine Abhängigkeitsinjektion. Sie legen die Abhängigkeit manuell fest und übergeben die Abhängigkeit nicht an das Ziel. – Gunhan

Verwandte Themen