You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// // Copyright © 2019 Swinject Contributors. All rights reserved. //
/// A configuration how an instance provided by a `Container` is shared in the system. /// The configuration is ignored if it is applied to a value type. public protocol ObjectScopeProtocol: AnyObject { /// Used to create `InstanceStorage` to persist an instance for single service. /// Will be invoked once for each service registered in given scope. func makeStorage() -> InstanceStorage }
/// Basic implementation of `ObjectScopeProtocol`. public class ObjectScope: ObjectScopeProtocol, CustomStringConvertible { public private(set) var description: String private var storageFactory: () -> InstanceStorage private let parent: ObjectScopeProtocol?
/// Instantiates an `ObjectScope` with storage factory and description. /// - Parameters: /// - storageFactory: Closure for creating an `InstanceStorage` /// - description: Description of object scope for `CustomStringConvertible` implementation /// - parent: If provided, its storage will be composed with the result of `storageFactory` public init( storageFactory: @escaping () -> InstanceStorage, description: String = "", parent: ObjectScopeProtocol? = nil ) { self.storageFactory = storageFactory self.description = description self.parent = parent }
/// Will invoke and return the result of `storageFactory` closure provided during initialisation. public func makeStorage() -> InstanceStorage { if let parent = parent { return CompositeStorage([storageFactory(), parent.makeStorage()]) } else { return storageFactory() } } }
|