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