RootLifetimeScope

๊ฐœ๋…

  • ํ”„๋กœ์ ํŠธ์— ์ตœ์ƒ์œ„ LifetimeScope ์ž…๋‹ˆ๋‹ค.

  • ๊ฒŒ์ž„์˜ ์‹œ์ž‘๋ถ€ํ„ฐ ์ข…๋ฃŒ๊นŒ์ง€ ์˜์†๋ฉ๋‹ˆ๋‹ค.

  • ScreenSystem์—์„œ๋Š” ์ผ์ข…์˜ EntryPoint๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ์—ญํ• ๋„ ์‹œํ‚ต๋‹ˆ๋‹ค.

๊ตฌํ˜„ ๋ฐฉ์นจ

  • ํŽ˜์ด์ง€ ์ปจํ…Œ์ด๋„ˆ์™€ ๋ชจ๋‹ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ SerializeField๋ฅผ ํ†ตํ•ด ์ฐธ์กฐ ๋ฐ›์Šต๋‹ˆ๋‹ค.

  • ์ฐธ์กฐ๋ฐ›์€ ๋‘ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

    • IContainerBuilder ํƒ€์ž…์˜ extension method๋กœ ScreenSystem์—์„œ ์ง€์›ํ•˜๋Š” RegisterPageSystem๊ณผ RegisterModalSystem ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ฒซ๋ฒˆ์งธ ํŽ˜์ด์ง€๋ฅผ Push์‹œํ‚ต๋‹ˆ๋‹ค.

    • EntryPoint ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ง๋‹ˆ๋‹ค.

      • IStartable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉ, ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

      • RootLifetimeScope์—์„œ RegisterEntryPoint๋กœ์„œ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

      • PageEventPublisher๋ฅผ Inject ๋ฐ›์•„์„œ PageBuilder๋ฅผ ๋ฉ”์‹œ์ง€๋กœ ๋ณด๋‚ด๋ฉด ํŽ˜์ด์ง€ Push ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    • ๊ธฐํƒ€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค, ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ๋””ํŽœ๋˜์‹œ ๋“ฑ๋“ฑ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

public class RootLifetimeScope : LifetimeScope
{
    [SerializeField] UnityScreenNavigator.Runtime.Core.Page.PageContainer _container;
    [SerializeField] UnityScreenNavigator.Runtime.Core.Modal.ModalContainer _modalContainer;

    protected override void Configure(IContainerBuilder builder)
    {
        builder.RegisterPageSystem(_container);
        builder.RegisterModalSystem(_modalContainer);
        builder.Register<IHttpClient>(_ => new HttpClient(), Lifetime.Singleton);

        var options = builder.RegisterMessagePipe();
        builder.RegisterMessageBroker<MessagePipeTestMessage>(options);
        builder.RegisterEntryPoint<TestEntryPoint>();
    }

    private class TestEntryPoint : IStartable
    {
        private readonly PageEventPublisher _publisher;

        public TestEntryPoint(PageEventPublisher publisher)
        {
            _publisher = publisher;
        }

        public void Start()
        {
            _publisher.SendPushEvent(new TestPageBuilder());
        }
    }
}

Last updated