[Zenject] Installer

Dev W·2022년 12월 15일
0

zenject

목록 보기
4/7

젠젝트는 Installer를 통해 Container에 접근할 수 있고,

바인딩문을 사용해 종속성 매핑을 진행한다.

public class AppInstaller : MonoInstaller
{
	public override void InstallBindings()
    {
    	Container.Bind<Foo>();
    }
}

젠젝트에서 제공하는 Installer는 세가지이다.

  • Installer<>
  • MonoInstaller
  • ScriptableObjectInstaller

Installer<>

Installer를 사용하는 가장 간단한 방법은 Installer 클래스를 상속받는 것이다.

public void GameInstaller : Installer<GameInstaller>
{
	public override void InstallBindings()
    {
    	Container.Bind<IPlayer>().To<Player>();
    }
}

Installer 실행시에 매개변수를 추가할 수도 있다.

public void GameInstaller : Installer<string, GameInstaller>
{
	[Inject] private string _playerName;
    
	public override void InstallBindings()
    {
    	Container.Bind<IPlayer>().To<Player>();
    }
}

public void AppInstaller : MonoInstaller
{
	public override void InstallerBindings()
    {
    	GameInstaller.Install(Container, "Player 1");
    }
}

MonoInstaller

MonoInstaller는 Installer와 기능은 동일하지만 유니티의 컴포넌트라는 점이 다르다.

인스펙터에서 속성을 편집할 수 있기때문에 일반적으로 사용되는 Installer이다.

public void AppInstaller : MonoInstaller
{
	public string playerName;
    
	public override void InstallerBindings()
    {
    	GameInstaller.Install(Container, playerName);
    }
}

ScriptableObjectInstaller

ScriptableObjectInstaller는 유니티의 ScriptableObject를 상속받은 Installer이다.

MonoInstaller와 마찬가지로 인스펙터에서 속성을 편집할 수 있고,

스크립터블 오브젝트처럼 게임실행 중에 변경된 값이 게임종료 후에도 지속된다는 이점을 가진다.


MonoInstaller 재사용 방법

MonoInstaller는 재사용하는 3가지 방법이 있다.

  • In-Scene Prefabs
  • Prefab Installers
  • Resources

1. In-Scene Prefabs

씬 안에 Installer 오브젝트를 만들고 SceneContext에 Mono Installers로 등록하여 사용한다.

2. Prefab Installers

Installer 프리팹을 만들어 SceneContext에 Prefab Installers로 등록하여 사용한다.

3. Resources

Installer 프리팹을 Resources 폴더에 넣고 해당 경로로 생성하여 사용한다.

public class AppInstaller : MonoInstaller
{
    public override void InstallBindings()
    {
        PlayerInstaller.InstallFromResource("Prefabs/Player Installer", Container);
    }
}

0개의 댓글