Unity/VContainer

유니티를 위한 DI 프레임워크 VContainer, Injecting into MonoBehaviours

VR하는소년 2023. 3. 11. 09:00

MonoBehaviours는 생성자를 지원하지 않으므로, Method Injection을 사용해서 의존성을 inject해야합니다

 

모노비헤이비어의 함수에 [Inject] 속성을 달아둔다고 해서, 자동으로 호출되는 것은 아닙니다!!! 

다음 3가지 방법을 통해 수동적으로 의존성을 Inject할 수 있습니다

 

#1. 특정 모노비헤이비어를 Inject를 하기 원하면 LifeTimeScope의 인스펙터에 지정하면 된다!

출처 - https://vcontainer.hadashikick.jp/resolving/gameobject-injection

모든 지정된 게임오브젝트의 모노비헤이비어는 자동으로 LifeTimeScope가 초기화될 때 Inject될 것이다!

#2. RegisterComponent의 함수 중 하나를 사용하여 컨테이너에 Monobehavior의 인스턴스를 등록해라. 

- 이 경우, 등록된 모노비헤이비어는 다른 클래스들에 Inject 하고 Injected 될 것이다

namespace MyGame
{
    public class HelloScreen : MonoBehaviour
    {
        public Button button;
        public TextMeshProUGUI helloText;
    }
}

MonoBehaviour를 상속받는 HelloScreen은

namespace MyGame
{
    public class GameLifetimeScope : LifetimeScope
    {
        [SerializeField] private HelloScreen HelloScreen;
        protected override void Configure(IContainerBuilder builder)
        {
            builder.Register<HelloWorld>(Lifetime.Singleton);
            builder.RegisterEntryPoint<GamePresenter>();
            builder.RegisterComponent(HelloScreen);
        }
    }
}

RegisterComponent로 HelloScreen을 등록해주면 된다!

 

#3. 런타임에 동적으로 생성된 모노비헤이비어에 등록하기 위해서는, IObjectResolver.Instantiate를 사용하면 된다