File tree Expand file tree Collapse file tree 5 files changed +108
-0
lines changed
Expand file tree Collapse file tree 5 files changed +108
-0
lines changed Original file line number Diff line number Diff line change 1+ //
2+ // DependencyInjector.swift
3+ // CoreLayer
4+ //
5+ // Created by 최재혁 on 7/21/25.
6+ //
7+
8+ import Foundation
9+ import Swinject
10+
11+ @propertyWrapper
12+ public final class Injected < T> {
13+ public let wrappedValue : T
14+
15+ public init ( ) {
16+ self . wrappedValue = DependencyInjector . shared. resolve ( T . self)
17+ }
18+ }
19+
20+ // DI 대상 등록
21+ public protocol DependencyAssemblable {
22+ func assemble( _ assemblyList: [ Assembly ] )
23+ func register< T> ( _ serviceType : T . Type , factory: @escaping ( Resolver ) -> T )
24+ }
25+
26+ // DI 등록한 서비스 사용
27+ public protocol DependencyResolvable {
28+ func resolve< T> ( _ serviceType : T . Type ) -> T
29+ }
30+
31+ public typealias Injector = DependencyAssemblable & DependencyResolvable
32+
33+ public final class DependencyInjector : Injector {
34+ private let container : Container = Container ( )
35+
36+ public static let shared = DependencyInjector ( )
37+
38+ private init ( ) { }
39+
40+ public func assemble( _ assemblyList: [ any Assembly ] ) {
41+ assemblyList. forEach {
42+ $0. assemble ( container: container)
43+ }
44+ }
45+
46+ public func register< T> ( _ serviceType: T . Type , factory : @escaping ( Resolver ) -> T ) {
47+ container. register ( serviceType, factory: factory)
48+ }
49+
50+ public func resolve< T> ( _ serviceType: T . Type ) -> T {
51+ container. resolve ( serviceType) !
52+ }
53+ }
Original file line number Diff line number Diff line change 1+ //
2+ // DependencyInjectorTest.swift
3+ // DITest
4+ //
5+ // Created by 최재혁 on 7/21/25.
6+ //
7+
8+ import Testing
9+ import Swinject
10+ import DIInjector
11+
12+ struct DependencyInjectorTest {
13+
14+ init ( ) async throws {
15+ DependencyInjector . shared. assemble ( [
16+ MockAssembly ( )
17+ ] ) }
18+
19+ @Test func dependencyTest( ) {
20+ @Injected var mockClass : MockClass
21+ #expect( mockClass. mockFunc ( ) )
22+ }
23+ }
Original file line number Diff line number Diff line change 1+ //
2+ // MockData.swift
3+ // CoreLayer
4+ //
5+ // Created by 최재혁 on 7/21/25.
6+ //
7+
8+ import Swinject
9+
10+ public class MockClass {
11+ func mockFunc( ) -> Bool {
12+ print ( " MockClass Registered " )
13+ return true
14+ }
15+ }
16+
17+ public struct MockAssembly : Assembly {
18+ public func assemble( container: Container ) {
19+ container. register ( MockClass . self) { _ in
20+ return MockClass ( )
21+ }
22+ }
23+ }
Original file line number Diff line number Diff line change @@ -26,6 +26,15 @@ struct CoreLayer: Layer {
2626 dependencies: [
2727 . external( name: " Swinject " )
2828 ]
29+ ) ,
30+ . createTarget(
31+ name: " DITest " ,
32+ product: . unitTests,
33+ sources: [ " DIInjector/Test/Sources/** " ] ,
34+ dependencies: [
35+ . target( name: " DIInjector " ) ,
36+
37+ ]
2938 )
3039 ]
3140 }
You can’t perform that action at this time.
0 commit comments