import NetworkingInterface
!//Module: Networking NEW
Slide 39
Slide 39 text
import NetworkingInterface
class ModuleConfiguration: ModuleConfiguring {
!//Module: Networking NEW
Slide 40
Slide 40 text
import NetworkingInterface
class ModuleConfiguration: ModuleConfiguring {
func registerImplementations(in registry: Registry) {
!//Module: Networking NEW
Slide 41
Slide 41 text
import NetworkingInterface
class ModuleConfiguration: ModuleConfiguring {
func registerImplementations(in registry: Registry) {
registry.register(type: Networking.self,
service: NetworkingAdapter())
!//Module: Networking NEW
Slide 42
Slide 42 text
import NetworkingInterface
class ModuleConfiguration: ModuleConfiguring {
func registerImplementations(in registry: Registry) {
registry.register(type: Networking.self,
service: NetworkingAdapter())
}
}
!//Module: Networking NEW
Slide 43
Slide 43 text
import NetworkingInterface
class ModuleConfiguration: ModuleConfiguring {
func registerImplementations(in registry: Registry) {
registry.register(type: Networking.self,
service: NetworkingAdapter())
}
}
!//Module: Networking NEW
Slide 44
Slide 44 text
!//Module: OfferPage NEW
Slide 45
Slide 45 text
import NetworkingInterface
!//Module: OfferPage NEW
Slide 46
Slide 46 text
import NetworkingInterface
class ModuleConfiguration: ModuleConfiguring {
!//Module: OfferPage NEW
Slide 47
Slide 47 text
import NetworkingInterface
class ModuleConfiguration: ModuleConfiguring {
func start(with resolver: Resolver) {
!//Module: OfferPage NEW
Slide 48
Slide 48 text
import NetworkingInterface
class ModuleConfiguration: ModuleConfiguring {
func start(with resolver: Resolver) {
guard let networking = resolver.resolve(type:
Networking.self)
!//Module: OfferPage NEW
Slide 49
Slide 49 text
import NetworkingInterface
class ModuleConfiguration: ModuleConfiguring {
func start(with resolver: Resolver) {
guard let networking = resolver.resolve(type:
Networking.self)
}
}
!//Module: OfferPage NEW
Slide 50
Slide 50 text
import NetworkingInterface
class ModuleConfiguration: ModuleConfiguring {
func start(with resolver: Resolver) {
guard let networking = resolver.resolve(type:
Networking.self)
}
}
!//Module: OfferPage NEW
Slide 51
Slide 51 text
var modules: [ModuleConfiguring.Type] {
OfferPage.ModuleConfiguration.self,
Networking.ModuleConfiguration.self,
!// …
}
!//Module: Application NEW
Slide 52
Slide 52 text
let container: Registry & Resolver = !//…
modules.forEach {
$0.registerImplementations(in: container)
}
modules.forEach {
$0.start(with: container)
}
!//Module: Application NEW
Slide 53
Slide 53 text
!//Module: DependencyInjection NEW
Slide 54
Slide 54 text
!//Module: DependencyInjection NEW
class DependencyContainer: Registry, Resolver {
Slide 55
Slide 55 text
!//Module: DependencyInjection NEW
class DependencyContainer: Registry, Resolver {
func register(type: T.Type, service: Any) {
Slide 56
Slide 56 text
!//Module: DependencyInjection NEW
class DependencyContainer: Registry, Resolver {
func register(type: T.Type, service: Any) {
dependencies[DependencyKey(type)] = service
}
}
Slide 57
Slide 57 text
!//Module: DependencyInjection NEW
class DependencyContainer: Registry, Resolver {
}
Slide 58
Slide 58 text
!//Module: DependencyInjection NEW
class DependencyContainer: Registry, Resolver {
}
func resolve(type: T.Type) !-> T? {
return dependencies[DependencyKey(type)] as? T
}
Slide 59
Slide 59 text
NEW
!//Zalety: Nowe Dependency Injection
Slide 60
Slide 60 text
• lżejszy workspace (mniej modułów)
NEW
!//Zalety: Nowe Dependency Injection
Slide 61
Slide 61 text
• lżejszy workspace (mniej modułów)
• zależności międzymodułowe tylko na moduły z interfejsami (protokoły)
NEW
!//Zalety: Nowe Dependency Injection
Slide 62
Slide 62 text
• lżejszy workspace (mniej modułów)
• zależności międzymodułowe tylko na moduły z interfejsami (protokoły)
• wstrzykiwanie implementacji interfejsów przez poszczególne moduły
NEW
!//Zalety: Nowe Dependency Injection
Slide 63
Slide 63 text
• lżejszy workspace (mniej modułów)
• zależności międzymodułowe tylko na moduły z interfejsami (protokoły)
• wstrzykiwanie implementacji interfejsów przez poszczególne moduły
• ekstrakcja potrzebnych typów przez poszczególne moduły
NEW
!//Zalety: Nowe Dependency Injection
Slide 64
Slide 64 text
allegro.tech
Speeding up iOS builds with Bazel
Speeding up warm builds in Xcode
Maciej Piotrowski
twitter.com/macpiotrowski89