Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 13 additions & 8 deletions Sources/SCInject/Container.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,16 @@ public final class DefaultContainer: Container {
register(type: type, name: .init(rawValue: name), scope: scope, closure: closure)
}

public func register<T>(_ type: T.Type, name: RegisterName, closure: @escaping (Resolver) -> T) {
public func register<T>(_ type: T.Type, name: RegistrationName, closure: @escaping (Resolver) -> T) {
register(type: type, name: name, scope: nil, closure: closure)
}

public func register<T>(_ type: T.Type, name: RegisterName, _ scope: Scope, closure: @escaping (Resolver) -> T) {
public func register<T>(
_ type: T.Type,
name: RegistrationName,
_ scope: Scope,
closure: @escaping (Resolver) -> T
) {
register(type: type, name: name, scope: scope, closure: closure)
}

Expand All @@ -77,7 +82,7 @@ public final class DefaultContainer: Container {
resolve(type, name: .init(rawValue: name))
}

public func resolve<T>(_ type: T.Type, name: RegisterName) -> T {
public func resolve<T>(_ type: T.Type, name: RegistrationName) -> T {
guard let instance = tryResolve(type, name: name) else {
let message = errorMessage("Failed to resolve given type -- TYPE=\(type) NAME=\(name.rawValue)")
fatalError(message)
Expand All @@ -95,15 +100,15 @@ public final class DefaultContainer: Container {
tryResolve(type: type, name: .init(rawValue: name), container: self)
}

public func tryResolve<T>(_ type: T.Type, name: RegisterName) -> T? {
public func tryResolve<T>(_ type: T.Type, name: RegistrationName) -> T? {
tryResolve(type: type, name: name, container: self)
}

// MARK: - Private

private func register<T>(
type: T.Type,
name: RegisterName?,
name: RegistrationName?,
scope: Scope?,
closure: @escaping (Resolver) -> T
) {
Expand All @@ -117,7 +122,7 @@ public final class DefaultContainer: Container {
resolvers[identifier] = makeResolver(scope ?? defaultScope, closure: closure)
}

private func tryResolve<T>(type: T.Type, name: RegisterName? = nil, container: Container) -> T? {
private func tryResolve<T>(type: T.Type, name: RegistrationName? = nil, container: Container) -> T? {
lock.lock(); defer { lock.unlock() }
if let resolver = resolvers[identifier(of: type, name: name)] {
return resolver.resolve(with: container) as? T
Expand All @@ -137,7 +142,7 @@ public final class DefaultContainer: Container {
}
}

private func identifier(of type: (some Any).Type, name: RegisterName?) -> ResolverIdentifier {
private func identifier(of type: (some Any).Type, name: RegistrationName?) -> ResolverIdentifier {
ResolverIdentifier(
name: name,
typeIdentifier: ObjectIdentifier(type),
Expand All @@ -146,7 +151,7 @@ public final class DefaultContainer: Container {
}

private struct ResolverIdentifier: Hashable {
let name: RegisterName?
let name: RegistrationName?
let typeIdentifier: ObjectIdentifier
let description: String
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@
import Foundation

/// A structure that represents a name used for registering and resolving dependencies in a container.
public struct RegisterName: RawRepresentable, CustomStringConvertible, Hashable {
public struct RegistrationName: RawRepresentable, CustomStringConvertible, Hashable {
public let rawValue: String

public init(rawValue string: String) {
rawValue = string
}

public var description: String {
"SCInject.RegisterName(\(rawValue))"
"SCInject.RegistrationName(\(rawValue))"
}
}
4 changes: 2 additions & 2 deletions Sources/SCInject/Registry.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ public protocol Registry {
/// - Parameter type: The type of the dependency to register.
/// - Parameter name: The name associated with the dependency.
/// - Parameter closure: A closure that provides the instance of the dependency.
func register<T>(_ type: T.Type, name: RegisterName, closure: @escaping (Resolver) -> T)
func register<T>(_ type: T.Type, name: RegistrationName, closure: @escaping (Resolver) -> T)

/// Registers a named dependency with a specified scope.
/// - Parameter type: The type of the dependency to register.
/// - Parameter name: The name associated with the dependency.
/// - Parameter scope: The scope in which the dependency should be resolved.
/// - Parameter closure: A closure that provides the instance of the dependency.
func register<T>(_ type: T.Type, name: RegisterName, _ scope: Scope, closure: @escaping (Resolver) -> T)
func register<T>(_ type: T.Type, name: RegistrationName, _ scope: Scope, closure: @escaping (Resolver) -> T)
}
2 changes: 1 addition & 1 deletion Sources/SCInject/Resolver.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,5 @@ public protocol Resolver: AnyObject {
/// - Parameter name: The `RegisterName` associated with the dependency.
/// - Returns: An instance of the resolved dependency.
/// - Note: The application will crash if the dependency cannot be resolved.
func resolve<T>(_ type: T.Type, name: RegisterName) -> T
func resolve<T>(_ type: T.Type, name: RegistrationName) -> T
}
2 changes: 1 addition & 1 deletion Tests/SCInject/ContainerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ final class ContainerTests: XCTestCase {
}

func testRegister_transientClassWithName() {
let second: RegisterName = .init(rawValue: "second")
let second: RegistrationName = .init(rawValue: "second")
let container = DefaultContainer()
container.register(TestClass1.self) { _ in
TestClass1(value: "TestClass1_Instance")
Expand Down