인스톨러(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를 상속하기 때문입니다.

results matching ""

    No results matching ""