Unity VContainer - High-Performance DI for Unity
Overview
VContainer is a high-performance IoC container for Unity, providing dependency injection patterns for testable and maintainable code.
Core Topics:
- •Constructor and method injection
- •Service registration patterns (Singleton, Transient, Scoped)
- •LifetimeScope hierarchies
- •MonoBehaviour injection
- •Factory patterns with DI
- •Testing with mocks
Foundation Required: unity-csharp-fundamentals (TryGetComponent, FindAnyObjectByType, null-safe coding)
Learning Path: DI fundamentals → VContainer basics → Advanced patterns → Testing
Quick Start
csharp
using VContainer;
using VContainer.Unity;
// Define service interface
public interface IPlayerService
{
void Initialize();
}
// Implement service
public class PlayerService : IPlayerService
{
public void Initialize() => Debug.Log("Player initialized");
}
// Setup LifetimeScope
public class GameLifetimeScope : LifetimeScope
{
protected override void Configure(IContainerBuilder builder)
{
builder.Register<IPlayerService, PlayerService>(Lifetime.Singleton);
builder.RegisterComponentInHierarchy<PlayerController>();
}
}
// Inject into MonoBehaviour
public class PlayerController : MonoBehaviour
{
[Inject] private readonly IPlayerService mPlayerService;
void Start() => mPlayerService.Initialize();
}
Key Concepts
Lifetime Scopes
- •Singleton: One instance per container
- •Transient: New instance every resolve
- •Scoped: One instance per scope
Injection Types
- •Constructor Injection: Preferred for required dependencies
- •Method Injection: For optional dependencies
- •Property/Field Injection: Use
[Inject]attribute
Reference Documentation
See VContainer Best Practices for detailed patterns.
Best Practices
- •Register interfaces: Loose coupling and testability
- •Constructor injection first: Explicit dependencies
- •Avoid Service Locator: Don't resolve in Update loops
- •Test with mocks: Use ContainerBuilder in tests
- •Clear hierarchies: Root → Scene → Local scopes