RootLifetimeScope

  • 프로젝트 최상단 씬에 최상단 게임오브젝트에 붙여둔다.

  • 아래는 예시코드이며, RootLifetimeScope에는 게임 진행 내내 수명이 유지되어야 하는 것들을 등록하는게 주 목적이며, 첫 UI 페이지를 시작시키는 EntryPoint 를 발동시키는 역할도 함.

public class ProjectRootLifetimeScope : VContainer.Unity.LifetimeScope
{
    [SerializeField] private PageContainer pageContainer;
    [SerializeField] private ModalContainer modalContainer;

    protected override void Configure(IContainerBuilder builder)
    {
        // ScreenSystem
        builder.RegisterPageSystem(pageContainer);
        builder.RegisterModalSystem(modalContainer);
    
        // MessagePipe
        var options = builder.RegisterMessagePipe();
        builder.RegisterMessageBroker<MessagePipeOptions>(options);
        
        RegisterGateways(builder);
        RegisterRepositories(builder);
        RegisterUseCases(builder);
        
        builder.RegisterEntryPoint<SampleEntryPoint>();
    }

    private void RegisterUseCases(IContainerBuilder builder)
    {
        builder.Register<SignInUseCase>(Lifetime.Scoped).AsImplementedInterfaces();
    }

    private void RegisterRepositories(IContainerBuilder builder)
    {
        builder.Register<AccountRepository>(Lifetime.Scoped).AsImplementedInterfaces();
    }

    private void RegisterGateways(IContainerBuilder builder)
    {
        builder.Register<HttpClientGateway>(Lifetime.Singleton).AsImplementedInterfaces();
    }

    // ReSharper disable once ClassNeverInstantiated.Local
    private class SampleEntryPoint : IStartable
    {
        private readonly PageEventPublisher _pageEventPublisher;
    
        public SampleEntryPoint(PageEventPublisher pageEventPublisher)
        {
            _pageEventPublisher = pageEventPublisher;
        }

        public void Start()
        {
            _pageEventPublisher.SendPushEvent(new SignInPageBuilder(false, false));
        }
    }
}

Last updated