Extend VContainer DI: eliminate manual composition and duplicate references
- Register InventoryModel, ShopModel as container-managed singletons - Register GameController, ShopController, InventoryController via RegisterComponent - Replace [SerializeField] with [Inject] for service dependencies in controllers - Move maxActiveModifierSlots config to GameLifetimeScope (composition root) - Remove manual model creation and Initialize() calls from GameController - Add ToggleVisibility() to ShopController/InventoryController, removing GetComponentInChildren - Move event subscriptions from Awake to Start for safe VContainer injection order - Transfer game startup orchestration to GameController.Start() Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,10 +5,13 @@ using YachtDice.Categories;
|
||||
using YachtDice.Economy;
|
||||
using YachtDice.Events;
|
||||
using YachtDice.Game;
|
||||
using YachtDice.Inventory;
|
||||
using YachtDice.Modifiers.Definition;
|
||||
using YachtDice.Modifiers.Pipeline;
|
||||
using YachtDice.Modifiers.Runtime;
|
||||
using YachtDice.Scoring;
|
||||
using YachtDice.Shop;
|
||||
using YachtDice.UI;
|
||||
|
||||
namespace YachtDice.DI
|
||||
{
|
||||
@@ -22,6 +25,12 @@ namespace YachtDice.DI
|
||||
[SerializeField] private CurrencyBank currencyBank;
|
||||
[SerializeField] private GameManager gameManager;
|
||||
[SerializeField] private DiceManager diceManager;
|
||||
[SerializeField] private GameController gameController;
|
||||
[SerializeField] private ShopController shopController;
|
||||
[SerializeField] private InventoryController inventoryController;
|
||||
|
||||
[Header("Settings")]
|
||||
[SerializeField] private int maxActiveModifierSlots = 5;
|
||||
|
||||
protected override void Configure(IContainerBuilder builder)
|
||||
{
|
||||
@@ -30,15 +39,23 @@ namespace YachtDice.DI
|
||||
builder.RegisterInstance(categoryCatalog);
|
||||
|
||||
// Core modifier services
|
||||
builder.Register<ModifierRegistry>(Lifetime.Singleton);
|
||||
builder.Register<ModifierRegistry>(Lifetime.Singleton)
|
||||
.WithParameter<int>(maxActiveModifierSlots);
|
||||
builder.Register<ModifierPipeline>(Lifetime.Singleton);
|
||||
builder.Register<GameEventBus>(Lifetime.Singleton);
|
||||
|
||||
// Domain models
|
||||
builder.Register<InventoryModel>(Lifetime.Singleton);
|
||||
builder.Register<ShopModel>(Lifetime.Singleton);
|
||||
|
||||
// Scene MonoBehaviour components
|
||||
builder.RegisterComponent(scoringSystem);
|
||||
builder.RegisterComponent(currencyBank);
|
||||
builder.RegisterComponent(gameManager);
|
||||
builder.RegisterComponent(diceManager);
|
||||
builder.RegisterComponent(gameController);
|
||||
builder.RegisterComponent(shopController);
|
||||
builder.RegisterComponent(inventoryController);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user