MonoBehaviours는 생성자를 지원하지 않으므로, Method Injection을 사용해서 의존성을 inject해야합니다
모노비헤이비어의 함수에 [Inject] 속성을 달아둔다고 해서, 자동으로 호출되는 것은 아닙니다!!!
다음 3가지 방법을 통해 수동적으로 의존성을 Inject할 수 있습니다
#1. 특정 모노비헤이비어를 Inject를 하기 원하면 LifeTimeScope의 인스펙터에 지정하면 된다!
모든 지정된 게임오브젝트의 모노비헤이비어는 자동으로 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를 사용하면 된다