При попытке и игре с Typhoon DI я понял, что область LazySingleton работает не так, как ожидалось, ленивые свойства впрыскиваются еще до их использования. Будучи более конкретным, я создал TyphoonAssembly следующим образом:Тайфун ленивая инъекция в Swift
public class AppAssembly : TyphoonAssembly {
public dynamic func knight() -> AnyObject{
return TyphoonDefinition.withClass(Knight.self){
(definition) in
definition.injectProperty("name", with: "Dragon")
definition.injectProperty("horse")
definition.scope = TyphoonScope.LazySingleton
}
}
public dynamic func horse() -> AnyObject{
return TyphoonDefinition.withClass(Horse.self){
(definition) in
definition.injectProperty("color", with: "red")
definition.scope = TyphoonScope.LazySingleton
}
}
}
где рыцарь NSObject и имеет validateProperties
функцию
class Knight:NSObject {
var name:String?
var horse: Horse?
func validateProperties(){
if name != nil{
println("Name not nil")
}
if horse != nil{
println("Horse not nil")
}
}
}
После активации сборки и получения рыцаря из него, вызывая validateProperties
функцию всегда печатать имя не ноль и Лошадь не ноль, даже эти свойства никогда не используются в моем коде. Я что-то пропустил здесь или просто ленивая инъекция не работает так же, как и быстрые ленивые хранимые свойства?