Files
FreewayGamesTest/Assets/Minesweeper/Runtime/Infrastructure/MinesweeperLifetimeScope.cs
T

78 lines
3.2 KiB
C#

using Minesweeper.Commands;
using Minesweeper.Config;
using Minesweeper.Core;
using Minesweeper.ECS;
using Minesweeper.Presentation.Adapters;
using Minesweeper.Presentation.Factories;
using Minesweeper.Presentation.Presenters;
using Minesweeper.Presentation.ReadModels;
using Minesweeper.Presentation.Views;
using UnityEngine;
using VContainer;
using VContainer.Unity;
namespace Minesweeper.Infrastructure
{
public sealed class MinesweeperLifetimeScope : LifetimeScope
{
[SerializeField] private MinesweeperGameConfig gameConfig;
[SerializeField] private MainMenuView mainMenuView;
[SerializeField] private GameView gameView;
protected override void Configure(IContainerBuilder builder)
{
builder.RegisterInstance(GetConfig());
builder.Register<GameStateService>(Lifetime.Singleton).As<IGameStateService>();
builder.Register<BoardService>(Lifetime.Singleton).As<IBoardService>();
builder.Register<GamePauseService>(Lifetime.Singleton).As<IGamePauseService>();
builder.Register<GameTimerService>(Lifetime.Singleton).As<IGameTimerService>().As<ITickable>();
builder.Register<BoardEcsSyncService>(Lifetime.Singleton).As<IBoardEcsSyncService>();
builder.Register<GameReadModel>(Lifetime.Singleton).As<IGameReadModel>();
builder.Register<GameStateViewAdapter>(Lifetime.Singleton).As<IGameStateViewAdapter>();
builder.Register<CellViewFactory>(Lifetime.Singleton).As<ICellViewFactory>();
if (mainMenuView != null)
{
builder.RegisterComponent(mainMenuView).As<IMainMenuView>();
}
else
{
builder.Register<NullMainMenuView>(Lifetime.Singleton).As<IMainMenuView>();
}
if (gameView != null)
{
builder.RegisterComponent(gameView).As<IGameView>();
}
else
{
builder.Register<NullGameView>(Lifetime.Singleton).As<IGameView>();
}
builder.Register<SelectFieldCommandHandler>(Lifetime.Singleton);
builder.Register<StartGameCommandHandler>(Lifetime.Singleton);
builder.Register<OpenCellCommandHandler>(Lifetime.Singleton);
builder.Register<ToggleFlagCommandHandler>(Lifetime.Singleton);
builder.Register<RestartCommandHandler>(Lifetime.Singleton);
builder.Register<PauseCommandHandler>(Lifetime.Singleton);
builder.Register<ResumeCommandHandler>(Lifetime.Singleton);
builder.Register<GoToMenuCommandHandler>(Lifetime.Singleton);
builder.Register<GameCommandDispatcher>(Lifetime.Singleton).As<IGameCommandDispatcher>();
builder.Register<MainMenuPresenter>(Lifetime.Singleton);
builder.Register<GamePresenter>(Lifetime.Singleton);
builder.RegisterEntryPoint<MinesweeperEntryPoint>();
}
private MinesweeperGameConfig GetConfig()
{
if (gameConfig != null)
{
return gameConfig;
}
return ScriptableObject.CreateInstance<MinesweeperGameConfig>();
}
}
}