// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved. import Foundation // MARK: - Singleton public class Singleton {} // MARK: - SingletonConfig public class SingletonConfig: Singleton { public let identifier: String public let createInstance: (Dependencies) -> S /// `fileprivate` to hide when accessing via `dependencies[singleton: ]` fileprivate init( identifier: String, createInstance: @escaping (Dependencies) -> S ) { self.identifier = identifier self.createInstance = createInstance } } // MARK: - Creation public extension Dependencies { static func create( identifier: String, createInstance: @escaping (Dependencies) -> S ) -> SingletonConfig { return SingletonConfig( identifier: identifier, createInstance: createInstance ) } }