Dependency Injection thực tế với Zenject
C# Code
// Yêu cầu: Cài đặt Zenject (Extenject) từ GitHub hoặc Unity Asset Store.
// 1. Tạo một Interface (ví dụ: IHealthManager)
public interface IHealthManager {
void TakeDamage(int amount);
}
// 2. Tạo một Class triển khai Interface đó
public class HealthManager : IHealthManager {
public void TakeDamage(int amount) {
Debug.Log("Player took " + amount + " damage.");
}
}
// 3. Tạo một Installer để 'bind' chúng lại với nhau
using Zenject;
public class GameInstaller : MonoInstaller {
public override void InstallBindings() {
// Bất cứ khi nào có yêu cầu IHealthManager, Zenject sẽ cung cấp một instance của HealthManager.
Container.Bind<IHealthManager>().To<HealthManager>().AsSingle();
}
}
// 4. 'Tiêm' (Inject) dependency vào Class cần sử dụng
using Zenject;
public class PlayerController : MonoBehaviour {
private IHealthManager _healthManager;
// Zenject sẽ tự động 'tiêm' dependency vào đây
[Inject]
public void Construct(IHealthManager healthManager) {
_healthManager = healthManager;
}
void Update() {
if (Input.GetKeyDown(KeyCode.Space)) {
_healthManager.TakeDamage(10);
}
}
}
// 5. Thiết lập Scene:
// - Tạo một GameObject rỗng, đặt tên là 'GameInstaller'.
// - Gắn script GameInstaller.cs vào GameObject đó.
// - Tạo một Scene Context trong Scene (chuột phải trong Hierarchy -> Zenject -> Scene Context).
// - Trong Inspector của Scene Context, kéo GameInstaller vào danh sách 'Mono Installers'.Hướng dẫn cài đặt và sử dụng Zenject, một framework Dependency Injection phổ biến cho Unity, để quản lý các phụ thuộc trong dự án một cách hiệu quả.