Lifetime Overview VContainer 코드를 살펴보면 Register(Lifetime. ~) 이런 구문을 본적이 있을 것입니다! 이때 Lifetime에는 총 3가지의 옵션이 있는데 첫 번째, Singleton 두 번째, Transient 세 번째, Scoped 이렇게 있습니다 차례대로 살펴보겠습니다! Singleton은 모든 컨테이너에 단 하나의 인스턴스입니다! 똑같은 Type은 같은 컨테이너에 등록될 수 없습니다! Transient 은 Resolving당 하나의 인스턴스입니다 Scope는 LifetimeScope당 하나의 인스턴스 입니다 LifetimeScope가 하나만 존재한다면, 싱글톤과 비슷합니다 만약 LifetimeScope 자식을 만든다면, 그 인스턴스는 각 자식마다 달라집니다 ..
Register를 사용하기 위해서는 다양한 방법이 존재합니다 class ServiceA : IServiceA, IInputPort, IDisposable { /* ... */ } Register Concrete Type builder.Register(Lifetime.Singleton); 위 코드는 다음처럼 풀어낼 수 있습니다 class ClassA { public ClassA(ServiceA serviceA) { /* ... */ } } Register as Interface builder.Register(); 위 코드는 다음처럼 풀어낼 수 있습니다 class ClassA { public ClassA(IServiceA serviceA) { /* ... */ } } Register as multiple..
IObjectResolver를 통해 직접적으로 DI Container에 접근할 수 있습니다! VContainer는 자동으로 IObjectResolver를 등록하고 필요한 곳 어디든지 Inject합니다! 그래서, 다른 dependency에서 얻는 것처럼 IObjectResolver을 얻을 수 있습니다! class ClassA { public ClassA(IObjectResolver container) { // Get (or create) whatever is registered as ServiceA. // This might be a subclass if you registered the // subclass as a ServiceA. var serviceA = container.Resolve(); // ..
MonoBehaviours는 생성자를 지원하지 않으므로, Method Injection을 사용해서 의존성을 inject해야합니다 모노비헤이비어의 함수에 [Inject] 속성을 달아둔다고 해서, 자동으로 호출되는 것은 아닙니다!!! 다음 3가지 방법을 통해 수동적으로 의존성을 Inject할 수 있습니다 #1. 특정 모노비헤이비어를 Inject를 하기 원하면 LifeTimeScope의 인스펙터에 지정하면 된다! 모든 지정된 게임오브젝트의 모노비헤이비어는 자동으로 LifeTimeScope가 초기화될 때 Inject될 것이다! #2. RegisterComponent의 함수 중 하나를 사용하여 컨테이너에 Monobehavior의 인스턴스를 등록해라. - 이 경우, 등록된 모노비헤이비어는 다른 클래스들에 Injec..
종속성은 프로퍼티나 필드 또한 Injection할 수 있다! Injection하기 위해서는 [Inject]를 달아주면 된다!class ClassA { [Inject] IServiceA serviceA { get; set; } [Inject] IServiceB serviceB; public ClassA() { } }프로퍼티와 필드에 Injection하는 것은 Method Injection을 대안하는 방법으로 사용할 수 있다! 2023.03.10 - [Unity/VContainer] - 유니티를 위한 DI 프레임워크 VContainer, Method Injection
만약 생성자에 Injection을 하지 못하는 경우라면, 함수에다가 대신 Injection을 사용하는 것을 고려해보면 된다! 주로 모노비헤이비어에서 유용하게 많이 쓰인다! public class SomeBehaviour : MonoBehaviour { float speed; [Inject] public void Construct(GameSettings settings) { speed = settings.speed; } } 생성자가 아닌 Construct 함수에서 Injection되는 것을 볼 수 있다! [Inject]가 달린 함수는 어떠한 이름이나 어떠한 접근 레벨도 가질 수 있다!
일반적으로, 종속성은 처음에 Resovle 될 때 구성되고 주입됩니다 종속성이 필요한 클래스가 등록될 때, 생성자를 제공합니다(매개인자를 받음으로) class ClassA { readonly IServiceA serviceA; readonly IServiceB serviceB; readonly SomeUnityComponent component; public ClassA( IServiceA serviceA, IServiceB serviceB, SomeUnityComponent component) { this.serviceA = serviceA; this.serviceB = serviceB; this.component = component; } } 위 코드처럼, ClassA라는 생성자에 serviceA, ..
[VContainer이란?] VContainer는 Unity를 위한 가볍고 빠른 DI(Dependency Injection) 프레임워크로, 종속성 및 개체 생성을 쉽게 관리할 수 있도록 도와줍니다. DI는 종속성의 생성 및 관리를 분리하는 프로그래밍 디자인 패턴입니다. VContainer의 주요 기능 중 하나는 성능입니다. 다른 종속성 주입 프레임워크와 달리 VContainer는 런타임이 아닌 컴파일 타임에 코드를 생성합니다. 전반적으로 VContainer는 Unity 프로젝트의 아키텍처를 단순화하고 개선하는 데 도움이 되는 강력하고 가벼운 DI 프레임워크입니다. 유니티(Unity) 인터페이스(Interface) 완전 쉽게 설명 먼저 인터페이스가 무엇인지 알고 시작해야합니다 인터페이스를 구글링하면 뭐 U..