### **콜백 등록 (Register Callbacks)**
**1. 컨테이너 빌드 콜백 (Container Build Callbacks)**
- **정의:** 컨테이너가 빌드될 때 임의의 액션(action)이 발생하도록 등록할 수 있습니다.
- **사용법:** `builder.RegisterBuildCallback()` 메서드를 사용합니다. 이 메서드는 `IContainerBuilder`에 람다 표현식 또는 다른 메서드를 전달받습니다. 이 콜백은 컨테이너 빌드가 완료된 직후 실행됩니다.
- **코드 예시:**
코드 스니펫
```
builder.RegisterBuildCallback(container =>
{
var serviceA = container.Resolve<ServiceA>();
var serviceB = container.Resolve<ServiceB>();
// 여기에 컨테이너 빌드 완료 후 실행하고 싶은 로직을 작성합니다.
// 예를 들어, 초기화가 필요한 서비스들을 Resolve하고 특정 메서드를 호출할 수 있습니다.
});
```
- **특징:**
- 콜백 인자로 `IObjectResolver`를 사용할 수 있습니다. 이는 빌드된 컨테이너에서 다른 서비스나 객체를 해결(resolve)하여 콜백 내부에서 사용할 수 있도록 합니다.
- `IObjectResolver`에 대한 더 자세한 정보는 "Container API" 문서를 참조하라고 안내합니다. (이는 3.5 Container API.pdf 문서에 해당합니다.)
**2. 컨테이너 폐기 콜백 (Container Dispose Callback)**
- **정의:** 컨테이너가 폐기(dispose)될 때 수행하고 싶은 프로세스를 등록할 수 있습니다.
- **사용법:** `builder.RegisterDisposeCallback()` 메서드를 사용합니다. 이 메서드도 `IContainerBuilder`에 람다 표현식 또는 다른 메서드를 전달받습니다. 이 콜백은 컨테이너가 `Dispose()`될 때 실행됩니다.
- **코드 예시:**
C#
```
builder.RegisterDisposeCallback(container =>
{
// 여기에 컨테이너가 폐기될 때 수행하고 싶은 로직을 작성합니다.
// 예를 들어, 리소스 해제, 파일 저장, 이벤트 구독 해제 등을 할 수 있습니다.
});
```
- **용도:** 컨테이너의 생명주기가 끝날 때 정리(cleanup) 작업을 수행하는 데 주로 사용됩니다. 예를 들어, `IDisposable` 인터페이스를 구현하지 않는 객체에 대한 명시적인 리소스 해제가 필요한 경우 유용합니다.
### 요약
VContainer에서 컨테이너의 생명주기 특정 지점(빌드 완료 또는 폐기)에 사용자 정의 코드를 삽입하는 방법을 설명합니다. `RegisterBuildCallback`은 컨테이너 설정 및 초기화 후 추가적인 로직을 실행할 때, `RegisterDisposeCallback`은 컨테이너가 파괴될 때 리소스 정리 또는 종료 작업을 수행할 때 활용됩니다. 이 콜백들은 `IObjectResolver`를 통해 빌드된 컨테이너에 접근할 수 있어 강력한 유연성을 제공합니다.
---
이전 : [[4.6 Register Collection]] | 다음 : [[5.1 Plain CSharp Entry point]]