using Models.Interfaces; using Presenter; using ScriptableObjects; using Services; using Services.Interfaces; using UnityEngine; using VContainer; using VContainer.Unity; using Views; namespace Scopes { public class LevelLifetimeScope : LifetimeScope { [SerializeField] private GameVariables gameVariables; [SerializeField] private Transform gemsHolder; [SerializeField] private Transform backgroundHolder; protected override void Configure(IContainerBuilder builder) { //Register variables builder.RegisterInstance(this.gameVariables); builder.RegisterInstance(this.gemsHolder); //Register component builder.RegisterComponentInHierarchy(); builder.Register(_ => new GameBoard(this.gameVariables.width, this.gameVariables.height), Lifetime.Scoped); //Register Services builder.Register(Lifetime.Scoped); builder.Register(Lifetime.Scoped); builder.Register(Lifetime.Scoped); //Register Pool builder.Register>(_ => new ObjectPoolService(this.gameVariables.gemsPrefabs, this.gemsHolder), Lifetime.Scoped); //Presenters builder.Register(Lifetime.Scoped); builder.Register(Lifetime.Scoped); builder.Register(Lifetime.Scoped).AsImplementedInterfaces(); //Entry Point builder.RegisterEntryPoint(); } } }