Skip to content

Commit ff572a6

Browse files
committed
ModuleScanner를 통해 생성한 Module에서 Instance를 캡처하여 재사용되던 문제 수정
1 parent 8be7e33 commit ff572a6

File tree

3 files changed

+29
-11
lines changed

3 files changed

+29
-11
lines changed

Sources/DIContainer/Module/AutoModule.swift

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import Foundation
22

33
open class AutoModuleBase {
44
public required init() {}
5+
6+
fileprivate func __newInstance() -> Self {
7+
Self()
8+
}
59
}
610

711
public protocol AutoModulable: AnyObject {
@@ -11,10 +15,17 @@ public protocol AutoModulable: AnyObject {
1115
public typealias AutoModule = AutoModuleBase & AutoModulable
1216

1317
#if DEBUG
14-
public extension AutoModulable {
18+
extension AutoModulable {
1519
var module: Module? {
16-
(self as? ModuleKeyType.Value)
17-
.map { instance in Module(ModuleKeyType.self) { instance } }
20+
guard
21+
let instance = self as? ModuleKeyType.Value,
22+
let autoModuleBase = instance as? AutoModuleBase
23+
else { return nil }
24+
25+
return Module(ModuleKeyType.self) {
26+
(autoModuleBase.__newInstance() as? ModuleKeyType.Value)
27+
?? instance
28+
}
1829
}
1930
}
2031
#endif

Tests/DIContainerTests/Tests/CachedModuleTests.swift renamed to Tests/DIContainerTests/Tests/AutoModuleIsNotCachedTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// CachedModuleTests.swift
2+
// AutoModuleIsNotCachedTests.swift
33
// DIContainer
44
//
55
// Created by minsOne on 1/23/25.
@@ -11,13 +11,13 @@ import Testing
1111

1212
@MainActor
1313
@Suite(.serialized)
14-
struct CachedModuleTests {
14+
struct AutoModuleIsNotCachedTests {
1515
init() {
1616
Container.autoRegisterModules()
1717
}
1818
}
1919

20-
extension CachedModuleTests {
20+
extension AutoModuleIsNotCachedTests {
2121
@Test
2222
func cachedModule() throws {
2323
let service1 = getMockService()
@@ -32,7 +32,7 @@ extension CachedModuleTests {
3232
service2.doSomething()
3333
do {
3434
let service = try #require(service2 as? MockServiceImpl)
35-
#expect(service.count == 2)
35+
#expect(service.count != 2)
3636
}
3737
}
3838

@@ -59,7 +59,7 @@ extension CachedModuleTests {
5959
}
6060
}
6161

62-
extension CachedModuleTests {
62+
private extension AutoModuleIsNotCachedTests {
6363
func getMockService() -> MockService {
6464
@Inject(MockServiceKey.self) var service
6565
return service

Tests/DIContainerTests/Tests/InjectTestsTests.swift

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,15 @@ extension ContainerTests {
3636
}
3737

3838
private func injectBehavior() {
39-
@Inject(MockServiceKey.self) var service: MockService
40-
service.doSomething()
41-
#expect((service as? MockServiceImpl)?.count == 1)
39+
@Inject(MockServiceKey.self) var service1: MockService
40+
service1.doSomething()
41+
#expect((service1 as? MockServiceImpl)?.count == 1)
42+
43+
service1.doSomething()
44+
#expect((service1 as? MockServiceImpl)?.count == 2)
45+
46+
@Inject(MockServiceKey.self) var service2: MockService
47+
service2.doSomething()
48+
#expect((service2 as? MockServiceImpl)?.count == 1)
4249
}
4350
}

0 commit comments

Comments
 (0)