Unity

Zenject Factory 사용법

Dean83 2022. 3. 24. 22:38

1. Zenject Factory 사용법 
    - Controller 스크립트, Factory 스크립트, Prefab, Installer 스크립트 필요함
    
     1.1. Controller 스크립트 : MonoBehaviour 상속
            - Prefab을 통해 object 생성시 세부 UI 세팅 스크립트
               (ex : object 생성시, prefab에 포함된 text 설정)

            - 내부에 Factory 클래스 필요.                

       => public 클래스명 : Factory<인자값, Controller 스크립트 클래스명> 

     1.2. Factory 스크립트 : IFactory<인자값, 1.1. 에 명시한 Controller 스크립트 클래스명> 상속
            - DiContainer 변수 필요하며, 생성자에서 인자값으로 받아야 함

            - public 1.1. 에 명시한 Controller 스크립트 클래스명 리턴함수 작성 필요 (prefab을 통한 object 생성 함수)
              => (ex :              

           => public 1.1. 에 명시한 Controller 스크립트 클래스명 Create
              { return DiContainer 변수.InstantiatePrefabResourceForComponent<1.1. 에 명시한 
                Controller 스크립트 클래스명>(Resources 하위에 있는 Prefab full 명칭, 
                new object[] { 인자값 });
              }

     1.3. Prefab
            - Resources 폴더 하위에 미리 생성되어 있어야 함.
            - Prefab에 1.1 에서 명시한 Controller 스크립트를 Inspector에서 연결해놔야 함  

     1.4. Installer 스크립트 : MonoInstaller<Installer 스크립트 클래스명> 상속
            - Scene Hierarchy에 있는 SceneContext -> Inspector 에 있는 Installers 에 연결할 스크립트
            - Installer 스크립트는 Scene Hierarchy Object 중 항상 켜져 있는 Object 하나에서, Inspector 에 추가 해야함. 

            - public override void InstallBindings() 함수 구현

         => public override void InstallBindings()
            {
              Container.BindFactory<1.1. 에 명시한 인자값, 1.1. 에 명시한 Controller 스크립트 
              클래스명.Factory>().FromFactory<3.2. 에서 명시한 Factory 클래스명>();
            }

     1.5. 실제 사용
            - 스크립트에서, 1.1. 에서 명시한 Controller 클래스명.Factory를 자료형으로 갖는 변수를 Inject 받아야 함              

        => [Inject] 
            private  1.1. 에서 명시한 Controller 클래스명.Factory

            - 해당 변수.Create(인자값) 을 통해 생성하게 됨.

'Unity' 카테고리의 다른 글

mp3 -> wav 변환  (0) 2022.03.24
Zenject Service 사용법  (0) 2022.03.24
UI Template 사용법  (7) 2022.03.24
코드난독화 어셋 사용법  (0) 2022.03.24
StopCoroutine, StartCoroutine 관련  (0) 2022.03.24