### **컬렉션 등록 (Register Collection)**
- **정의:** VContainer는 특정 타입을 자동으로 암묵적으로 해결(resolve)하여 특별한 관계를 지원합니다.
- **기능:** 중복으로 등록된 인터페이스들은 `IEnumerable<T>` 또는 `IReadOnlyList<T>`와 함께 해결될 수 있습니다.
**기본 예시:**
C#
```
// IDisposable 인터페이스를 구현하는 두 개의 다른 클래스 A와 B를 등록
builder.Register<IDisposable, A>(Lifetime.Scoped);
builder.Register<IDisposable, B>(Lifetime.Scoped);
class ClassA
{
// IEnumerable<IDisposable>을 통해 등록된 모든 IDisposable 인스턴스를 주입받음
public ClassA(IEnumerable<IDisposable> disposables) { /* ... */ }
}
// 또는 IReadOnlyList<IDisposable>을 통해 주입받을 수도 있음
class ClassA
{
public ClassA(IReadOnlyList<IDisposable> disposables) { /* ... */ }
}
```
- **설명:**
- 위 예시에서는 `IDisposable` 인터페이스를 구현하는 `A`와 `B`라는 두 개의 클래스를 각각 `Lifetime.Scoped`로 등록합니다.
- `ClassA`는 생성자에서 `IEnumerable<IDisposable>` 또는 `IReadOnlyList<IDisposable>` 타입으로 `disposables`를 주입받습니다.
- VContainer는 `ClassA`가 `IEnumerable<IDisposable>` 또는 `IReadOnlyList<IDisposable>`를 요청할 때, 이전에 `IDisposable`로 등록된 모든 `A`와 `B` 인스턴스들을 컬렉션 형태로 묶어서 주입해줍니다.
**주의사항 (NOTE):**
- "이 기능은 주로 `ITickable` 마커 등 내부 함수에서 사용됩니다."
- 이것은 이 컬렉션 등록 및 해결 기능이 VContainer 자체의 내부 로직, 예를 들어 `ITickable`, `IStartable` 등과 같은 라이프사이클 인터페이스를 구현하는 모든 객체를 일괄적으로 처리할 때 주로 사용된다는 것을 의미합니다. 개발자가 직접적으로 이 기능을 사용하여 비즈니스 로직의 의존성을 주입하는 경우가 아주 흔하지는 않을 수 있지만, 동일한 인터페이스를 구현하는 여러 모듈을 관리할 때는 유용하게 활용될 수 있습니다.
### 요약
VContainer가 `IEnumerable<T>` 또는 `IReadOnlyList<T>`를 통해 동일한 타입(주로 인터페이스)으로 등록된 여러 의존성들을 한 번에 주입받을 수 있도록 지원한다는 것을 설명합니다. 이 기능은 특히 VContainer 내부에서 `ITickable`과 같은 마커 인터페이스를 사용하는 객체들을 관리하는 데 활용되며, 개발자도 특정 인터페이스를 구현하는 모든 서비스나 객체에 대한 참조가 필요할 때 이 기능을 활용할 수 있습니다.
---
이전 : [[4.5 Register ScriptableObject]] | 다음 : [[4.7 Register Callbacks]]