/
ApplicationAssembly.swift
78 lines (67 loc) · 3.3 KB
/
ApplicationAssembly.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//
// AppAssembly.swift
// LoLBookOfChampions
//
// Created by Jeff Roberts on 8/16/15.
// Copyright © 2015 NimbleNoggin.io. All rights reserved.
//
import Foundation
import ReactiveCocoa
import Typhoon
import UIKit
// Global dispatch_queues and Schedulers
// This is a workaround/hack to get around the limitation that Schedulers cannot be assembled/injected
let backgroundDispatchQueue = dispatch_queue_create("io.nimblenoggin.lolbookofchampions.background_queue", DISPATCH_QUEUE_CONCURRENT)
let backgroundScheduler = QueueScheduler(queue: backgroundDispatchQueue, name: "io.nimblenoggin.bookofchampions.background_scheduler")
let dataDragonDatabaseQueue = dispatch_queue_create("io.nimblenoggin.lolbookofchampions.datadragon.database_queue", DISPATCH_QUEUE_SERIAL)
let dataDragonDatabaseScheduler = QueueScheduler(queue: dataDragonDatabaseQueue, name: "io.nimblenoggin.lolbookofchampions.datadragon_database_scheduler")
class ApplicationAssembly : TyphoonAssembly {
var core : CoreAssembly!
var dataDragon : DataDragonAssembly!
override init() {
super.init()
}
dynamic func appDelegate() -> AnyObject {
return TyphoonDefinition.withClass(AppDelegate.self) { definition in
definition.injectProperty("backgroundQueue", with: backgroundDispatchQueue)
definition.injectProperty("dataDragonDatabaseQueue", with: dataDragonDatabaseQueue)
definition.injectProperty("dataDragon", with: self.dataDragon.dataDragon())
definition.injectProperty("fileManager", with: self.core.fileManager())
}
}
dynamic func championCollectionViewController() -> AnyObject {
return TyphoonDefinition.withClass(ChampionCollectionViewController.self) { definition in
definition.injectProperty("dataSource", with: self.championCollectionViewDataSource())
definition.injectProperty("mainBundle", with: self.core.mainBundle())
}
}
dynamic func championCollectionViewDataSource() -> AnyObject {
return TyphoonDefinition.withClass(ChampionCollectionViewDataSource.self) { definition in
definition.useInitializer("initWithContentResolver:") { initializer in
initializer.injectParameterWith(self.core.contentResolver())
}
}
}
dynamic func championSkinCollectionViewController() -> AnyObject {
return TyphoonDefinition.withClass(ChampionSkinCollectionViewController.self) { definition in
definition.injectProperty("dataSource", with: self.championSkinCollectionViewDataSource())
}
}
dynamic func championSkinCollectionViewDataSource() -> AnyObject {
return TyphoonDefinition.withClass(ChampionSkinCollectionViewDataSource.self) { definition in
definition.useInitializer("initWithContentResolver:") { initializer in
initializer.injectParameterWith(self.core.contentResolver())
}
}
}
dynamic func currentDevice() -> AnyObject {
return TyphoonDefinition.withClass(UIDevice.self) { definition in
definition.useInitializer("currentDevice")
}
}
dynamic func mainScreen() -> AnyObject {
return TyphoonDefinition.withClass(UIScreen.self) { definition in
definition.useInitializer("mainScreen")
}
}
}