// Copyright © 2024 VOID Software SA. All rights reserved. import Foundation import Swinject final class DIContainer { static var shared = DIContainer(isMocking: false) let container: Container = Container() let assembler: Assembler init(isMocking: Bool) { if !isMocking { assembler = Assembler( [ ManagerAssembly(), RepositoriesAssembly(), ViewModelsAssembly() ], container: container ) } else { assembler = Assembler( [ ], container: container ) } } func resolve() -> T { guard let resolvedType = container.resolve(T.self) else { fatalError("Could not resolve dependency") } return resolvedType } func resolve(argument: Arg) -> T { guard let resolvedType = container.resolve(T.self, argument: argument) else { fatalError("Could not resolve dependency (3)") } return resolvedType } }