Newer
Older
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// MARK: SDK
import Network
// MARK: Isolated features
import HUD
import Theme
import Bindings
import XXLogger
import Keychain
import Defaults
import Integration
import Permissions
import CrashService
import CrashReporting
import NetworkMonitor
import VersionChecking
import PushNotifications
import DependencyInjection
import Voxophone
// MARK: UI Features
import ScanFeature
import ChatFeature
import MenuFeature
import SearchFeature
import ContactFeature
import ProfileFeature
import ChatListFeature
import SettingsFeature
import RequestsFeature
import OnboardingFeature
import ContactListFeature
struct DependencyRegistrator {
static private let container = DependencyInjection.Container.shared
// MARK: MOCK
static func registerForMock() {
container.register(XXLogger.noop)
container.register(CrashReporter.noop)
container.register(VersionChecker.mock)
container.register(XXNetwork<BindingsMock>() as XXNetworking)
container.register(MockNetworkMonitor() as NetworkMonitoring)
container.register(KeyObjectStore.userDefaults)
container.register(MockPushHandler() as PushHandling)
container.register(MockKeychainHandler() as KeychainHandling)
container.register(MockPermissionHandler() as PermissionHandling)
registerCommonDependencies()
}
// MARK: LIVE
static func registerForLive() {
container.register(XXLogger.live())
container.register(CrashReporter.live)
container.register(VersionChecker.live())
container.register(XXNetwork<BindingsClient>() as XXNetworking)
container.register(NetworkMonitor() as NetworkMonitoring)
container.register(KeyObjectStore.userDefaults)
container.register(PushHandler() as PushHandling)
container.register(KeychainHandler() as KeychainHandling)
container.register(PermissionHandler() as PermissionHandling)
registerCommonDependencies()
}
// MARK: COMMON
static private func registerCommonDependencies() {
container.register(Voxophone())
// MARK: Isolated
container.register(HUD() as HUDType)
container.register(ThemeController() as ThemeControlling)
container.register(StatusBarController() as StatusBarStyleControlling)
// MARK: Coordinators
container.register(SearchCoordinator() as SearchCoordinating)
container.register(ProfileCoordinator() as ProfileCoordinating)
container.register(SettingsCoordinator() as SettingsCoordinating)
container.register(
ChatCoordinator(
retryFactory: RetrySheetController.init,
contactFactory: ContactController.init(_:)
) as ChatCoordinating)
container.register(
ContactCoordinator(
requestsFactory: RequestsContainerController.init
) as ContactCoordinating)
container.register(
RequestsCoordinator(
searchFactory: SearchController.init
) as RequestsCoordinating)
container.register(
OnboardingCoordinator(
chatListFactory: ChatListController.init
) as OnboardingCoordinating)
container.register(
ContactListCoordinator(
scanFactory: ScanContainerController.init,
searchFactory: SearchController.init,
newGroupFactory: CreateGroupController.init,
requestsFactory: RequestsContainerController.init
) as ContactListCoordinating)
container.register(
ScanCoordinator(
contactsFactory: ContactListController.init,
requestsFactory: RequestsContainerController.init
) as ScanCoordinating)
container.register(
ChatListCoordinator(
scanFactory: ScanContainerController.init,
searchFactory: SearchController.init,
profileFactory: ProfileController.init,
settingsFactory: SettingsController.init,
contactsFactory: ContactListController.init,
requestsFactory: RequestsContainerController.init
) as ChatListCoordinating)
}
}