젠젝트는 Installer를 통해 Container에 접근할 수 있고,
바인딩문을 사용해 종속성 매핑을 진행한다.
public class AppInstaller : MonoInstaller
{
public override void InstallBindings()
{
Container.Bind<Foo>();
}
}
젠젝트에서 제공하는 Installer는 세가지이다.
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가지 방법이 있다.
씬 안에 Installer 오브젝트를 만들고 SceneContext에 Mono Installers로 등록하여 사용한다.
Installer 프리팹을 만들어 SceneContext에 Prefab Installers로 등록하여 사용한다.
Installer 프리팹을 Resources 폴더에 넣고 해당 경로로 생성하여 사용한다.
public class AppInstaller : MonoInstaller
{
public override void InstallBindings()
{
PlayerInstaller.InstallFromResource("Prefabs/Player Installer", Container);
}
}