|
3 | 3 | //
|
4 | 4 |
|
5 | 5 | import Foundation
|
6 |
| -import UIKit |
7 |
| - |
8 |
| -protocol DependencyContainerProtocol: RedirectNetworkSessionProvider { |
9 |
| - var dateProvider: DateProviderProtocol { get } |
10 |
| - var networkSession: NetworkSessionProtocol { get } |
11 |
| - var notificationStateProvider: NotificationStateProviderProtocol { get } |
12 |
| - var localStorage: LocalStorageProtocol { get } |
13 |
| - var inAppDisplayer: InAppDisplayerProtocol { get } |
14 |
| - var inAppPersister: InAppPersistenceProtocol { get } |
15 |
| - var urlOpener: UrlOpenerProtocol { get } |
16 |
| - var applicationStateProvider: ApplicationStateProviderProtocol { get } |
17 |
| - var notificationCenter: NotificationCenterProtocol { get } |
18 |
| - var apnsTypeChecker: APNSTypeCheckerProtocol { get } |
19 |
| - |
20 |
| - func createInAppFetcher(apiClient: ApiClientProtocol) -> InAppFetcherProtocol |
21 |
| - func createPersistenceContextProvider() -> IterablePersistenceContextProvider? |
22 |
| - func createRequestHandler(apiKey: String, |
23 |
| - config: IterableConfig, |
24 |
| - endPoint: String, |
25 |
| - authProvider: AuthProvider?, |
26 |
| - authManager: IterableAuthManagerProtocol, |
27 |
| - deviceMetadata: DeviceMetadata, |
28 |
| - offlineMode: Bool) -> RequestHandlerProtocol |
29 |
| - func createHealthMonitorDataProvider(persistenceContextProvider: IterablePersistenceContextProvider) -> HealthMonitorDataProviderProtocol |
30 |
| -} |
31 |
| - |
32 |
| -extension DependencyContainerProtocol { |
33 |
| - func createInAppManager(config: IterableConfig, |
34 |
| - apiClient: ApiClientProtocol, |
35 |
| - requestHandler: RequestHandlerProtocol, |
36 |
| - deviceMetadata: DeviceMetadata) -> IterableInternalInAppManagerProtocol { |
37 |
| - InAppManager(requestHandler: requestHandler, |
38 |
| - deviceMetadata: deviceMetadata, |
39 |
| - fetcher: createInAppFetcher(apiClient: apiClient), |
40 |
| - displayer: inAppDisplayer, |
41 |
| - persister: inAppPersister, |
42 |
| - inAppDelegate: config.inAppDelegate, |
43 |
| - urlDelegate: config.urlDelegate, |
44 |
| - customActionDelegate: config.customActionDelegate, |
45 |
| - urlOpener: urlOpener, |
46 |
| - allowedProtocols: config.allowedProtocols, |
47 |
| - applicationStateProvider: applicationStateProvider, |
48 |
| - notificationCenter: notificationCenter, |
49 |
| - dateProvider: dateProvider, |
50 |
| - moveToForegroundSyncInterval: config.inAppDisplayInterval) |
51 |
| - } |
52 |
| - |
53 |
| - func createAuthManager(config: IterableConfig) -> IterableAuthManagerProtocol { |
54 |
| - AuthManager(delegate: config.authDelegate, |
55 |
| - expirationRefreshPeriod: config.expiringAuthTokenRefreshPeriod, |
56 |
| - localStorage: localStorage, |
57 |
| - dateProvider: dateProvider) |
58 |
| - } |
59 |
| - |
60 |
| - func createRequestHandler(apiKey: String, |
61 |
| - config: IterableConfig, |
62 |
| - endPoint: String, |
63 |
| - authProvider: AuthProvider?, |
64 |
| - authManager: IterableAuthManagerProtocol, |
65 |
| - deviceMetadata: DeviceMetadata, |
66 |
| - offlineMode: Bool) -> RequestHandlerProtocol { |
67 |
| - let onlineProcessor = OnlineRequestProcessor(apiKey: apiKey, |
68 |
| - authProvider: authProvider, |
69 |
| - authManager: authManager, |
70 |
| - endPoint: endPoint, |
71 |
| - networkSession: networkSession, |
72 |
| - deviceMetadata: deviceMetadata, |
73 |
| - dateProvider: dateProvider) |
74 |
| - if let persistenceContextProvider = createPersistenceContextProvider() { |
75 |
| - let healthMonitorDataProvider = createHealthMonitorDataProvider(persistenceContextProvider: persistenceContextProvider) |
76 |
| - let healthMonitor = HealthMonitor(dataProvider: healthMonitorDataProvider, |
77 |
| - dateProvider: dateProvider, |
78 |
| - networkSession: networkSession) |
79 |
| - let offlineProcessor = OfflineRequestProcessor(apiKey: apiKey, |
80 |
| - authProvider: authProvider, |
81 |
| - authManager: authManager, |
82 |
| - endPoint: endPoint, |
83 |
| - deviceMetadata: deviceMetadata, |
84 |
| - taskScheduler: createTaskScheduler(persistenceContextProvider: persistenceContextProvider, |
85 |
| - healthMonitor: healthMonitor), |
86 |
| - taskRunner: createTaskRunner(persistenceContextProvider: persistenceContextProvider, |
87 |
| - healthMonitor: healthMonitor), |
88 |
| - notificationCenter: notificationCenter) |
89 |
| - return RequestHandler(onlineProcessor: onlineProcessor, |
90 |
| - offlineProcessor: offlineProcessor, |
91 |
| - healthMonitor: healthMonitor, |
92 |
| - offlineMode: offlineMode) |
93 |
| - } else { |
94 |
| - return RequestHandler(onlineProcessor: onlineProcessor, |
95 |
| - offlineProcessor: nil, |
96 |
| - healthMonitor: nil, |
97 |
| - offlineMode: offlineMode) |
98 |
| - } |
99 |
| - } |
100 |
| - |
101 |
| - func createHealthMonitorDataProvider(persistenceContextProvider: IterablePersistenceContextProvider) -> HealthMonitorDataProviderProtocol { |
102 |
| - HealthMonitorDataProvider(maxTasks: 1000, persistenceContextProvider: persistenceContextProvider) |
103 |
| - } |
104 |
| - |
105 |
| - func createPersistenceContextProvider() -> IterablePersistenceContextProvider? { |
106 |
| - CoreDataPersistenceContextProvider(dateProvider: dateProvider) |
107 |
| - } |
108 |
| - |
109 |
| - func createRedirectNetworkSession(delegate: RedirectNetworkSessionDelegate) -> NetworkSessionProtocol { |
110 |
| - RedirectNetworkSession(delegate: delegate) |
111 |
| - } |
112 |
| - |
113 |
| - private func createTaskScheduler(persistenceContextProvider: IterablePersistenceContextProvider, |
114 |
| - healthMonitor: HealthMonitor) -> IterableTaskScheduler { |
115 |
| - IterableTaskScheduler(persistenceContextProvider: persistenceContextProvider, |
116 |
| - notificationCenter: notificationCenter, |
117 |
| - healthMonitor: healthMonitor, |
118 |
| - dateProvider: dateProvider) |
119 |
| - } |
120 |
| - |
121 |
| - private func createTaskRunner(persistenceContextProvider: IterablePersistenceContextProvider, |
122 |
| - healthMonitor: HealthMonitor) -> IterableTaskRunner { |
123 |
| - IterableTaskRunner(networkSession: networkSession, |
124 |
| - persistenceContextProvider: persistenceContextProvider, |
125 |
| - healthMonitor: healthMonitor, |
126 |
| - notificationCenter: notificationCenter, |
127 |
| - connectivityManager: NetworkConnectivityManager()) |
128 |
| - } |
129 |
| -} |
130 | 6 |
|
131 | 7 | struct DependencyContainer: DependencyContainerProtocol {
|
132 | 8 | func createInAppFetcher(apiClient: ApiClientProtocol) -> InAppFetcherProtocol {
|
|
0 commit comments