A lightweight, zero-dependency dependency injection container for Unity.
Part of the Unity Nexus plugin family.
Installation
Add via Unity Package Manager using the git URL:
https://github.com/arijeetbaruah/Unity-Nexus.git
Quick Start
1. Create an Installer
using UnityNexus.DI;
public class GameInstaller : NexusInstaller
{
protected override void InstallBindings(DependencyContainer container)
{
container.BindInstance(new AudioService());
container.BindSingleton<IPlayerService>(() => new PlayerService());
container.BindTransient<IEnemyFactory>(() => new EnemyFactory());
}
}
Attach GameInstaller to a GameObject in your scene. It runs on Awake before everything else — set its Script Execution Order accordingly.
2. Implement IInjectable
using UnityNexus.DI;
using UnityEngine;
public class LevelingService : MonoBehaviour, IInjectable
{
private IPlayerService _playerService;
public void Inject(DependencyContainer container)
{
_playerService = container.Resolve<IPlayerService>();
}
}
NexusInstaller automatically finds all IInjectable MonoBehaviours in the scene and calls Inject after bindings are registered.
Binding Types
| Method | Behaviour |
| BindInstance<T>(instance) | Registers a pre-existing object as a singleton |
| BindSingleton<T>(factory) | Creates once on first resolve, cached forever |
| BindTransient<T>(factory) | Creates a new instance on every resolve |
Resolving
var service = container.Resolve<IPlayerService>();
if (container.TryResolve<IPlayerService>(out var service))
{
}
if (container.HasBinding<IPlayerService>())
{
}
Requirements
- Unity 2021.3+
- .NET Standard 2.1