2017-08-09 2 views
1

Ich arbeite an einem privaten Pod und derzeit habe ich Schwierigkeiten mit Typhoon, um Eigenschaften in die Bootstrap-Klasse zu injizieren.Verwenden Sie Typhoon, um Eigenschaften in Klassen einzufügen, die nicht von Typhoon Assembly initialisiert werden.

Meine Klasse:

public class MyLibrary: NSObject { 
    var dependency: MyDependencyProtocol? 
} 

Meine Montage:

open class MyLibraryAssembly: TyphoonAssembly { 

    open dynamic func lib() -> Any 
    { 
     return TyphoonDefinition.withClass(MyLibrary.self) { (definition) in 
      definition?.injectProperty(#selector(getter: MyLibrary.dependency), with: self.dependency()) 
      definition?.scope = .singleton 
     } 
    } 
} 

Allerdings wird der Verbraucher app var lib verwenden = MyLibrary() das Objekt zu initialisieren, anstatt Dependency Injection verwenden. Wie injiziere ich Abhängigkeiten in die MyLibrary-Klasse, wenn der Init aufgerufen wird?

Antwort

1

Es könnte besser sein, eine Klassenmethode in Ihrer Klasse MyLibrary zu definieren, um eine Build-Instanz Ihrer Klasse MyLibrary zurückzugeben. Diese Methode würde:

  • Bootstrap Typhoon
  • Typhoon bitte nach einem eingebauten & konfiguriert Instanz Ihrer Bibliothek
  • zurück an die Methode Anrufer

Beispiel: MyLibrary.instance() oder MyLibrary.instanceWithConfig(someConfig).

  • Anrufern dieser Methoden sich nicht darum kümmern, wie das Objekt ist hinter den Kulissen bauen hinter - nur darauf vertrauen, dass eine integrierte & konfigurierte Instanz zurückgegeben.
  • Noch die Option, eine Instanz der Bibliothek manuell mit dem öffentlichen Konstruktor zu assemblieren.
+0

Danke, es funktioniert! – Steven

Verwandte Themen