인스톨러(Installer)
인스톨러(Installer)는 주어진 추상 클래스(보통 인터페이스(interface) 형의 클래스)에 실제 사용할 클래스를 바인딩하는 처리를 합니다.
인스톨은 앱의 시작 단계에서 이루어지며 다음과 같은 특징이 있습니다.
- 하나 이상의 인스톨러를 가질 수 있다.
- Context에 등록된 순서대로 인스톨을 처리한다.
- 인스톨시에는 객체를 인스턴스화하지 않기 때문에 인스톨의 처리 순서는 중요하지 않다.
DefaultEcsRxInstaller는 ecsrx
프레임워크의 기본 인스톨러로 DefaultEcsRxInstaller.InstallBindings에서 어떤 클래스들을 바인딩하는지를 살펴 보면 ecsrx를 구성하는 기본 시스템을 파악할 수 있습니다.
ecsrx의 기본 인스톨러는 'DefaultEcsRxInstaller' 클래스입니다.
namespace EcsRx.Unity.Installers
{
public class DefaultEcsRxInstaller : MonoInstaller
{
public override void InstallBindings()
{
Container.Bind<IMessageBroker>().To<MessageBroker>().AsSingle();
Container.Bind<IEventSystem>().To<EventSystem>().AsSingle();
Container.Bind<IIdentityGenerator>().To<SequentialIdentityGenerator>().AsSingle();
Container.Bind<IPoolManager>().To<PoolManager>().AsSingle();
Container.Bind<IReactToDataSystemHandler>().To<ReactToDataSystemHandler>();
Container.Bind<IReactToEntitySystemHandler>().To<ReactToEntitySystemHandler>();
Container.Bind<IReactToGroupSystemHandler>().To<ReactToGroupSystemHandler>();
Container.Bind<ISetupSystemHandler>().To<SetupSystemHandler>();
Container.Bind<IManualSystemHandler>().To<ManualSystemHandler>();
Container.Bind<ISystemExecutor>().To<SystemExecutor>().AsSingle();
}
}
}
인스톨 처리는 IInstaller.InstallBindings 메소드를 오버라이딩해서 처리하는데, 이 InstallBindings 메소드는 Context에서 호출합니다.
DefaultEcsRxInstaller는 MonoInstaller 클래스를 상속하고 있는데 이 클래스는 MonoBehaviours 클래스를 상속하는 클래스이므로 GameObject의 컴포넌트로 추가해서 사용합니다. 그런데 DefaultEcsRxInstaller.InstallBindings는 Context에서 호출해야 이 인스톨러의 바인딩 처리가 이루어지므로 GameObject에 DefaultEcsRxInstaller를 추가한 후에는 SceneContext에 등록하여 SceneContext가 이 인스톨러를 참조할 수 있도록 해야 합니다. 그래야만 실행시 DefaultEcsRxInstaller.InstallBindings 함수의 호출이 가능합니다.
Context로 SceneContext를 사용하는 이유는 DefaultEcsRxInstaller가 MonoInstaller를 상속하기 때문입니다.