方便管理越来越多的单例
======================================================================================
using System;
using System.Collections.Generic;
using UnityEngine;
public class IOCContainer
{
//创建字典存储实例
private Dictionary<Type, object> m_instances = new Dictionary<Type, object>();
public void RegisterInstance<T>(T instance)
{
//反射获取类信息
var type = typeof(T);
//判断是否存在
if (m_instances.ContainsKey(type))
{ //如果存在,则替换
m_instances[type] = instance;
}
else
{ //不存在,则添加
m_instances.Add(type, instance);
}
}
public T Get<T>() where T : class
{ //获取实例
var key = typeof(T);
//out 存储
object retInstance;
//判断是否存在
if (m_instances.TryGetValue(key,out retInstance))
{
//存在,则直接返回
return retInstance as T;
}
//不存在 创建
Debug.Log("IOCContainer: 未包括实例 ");
return null;
}
}
=====================================================================================
using UnityEngine;
public class IOCExample : MonoBehaviour
{
void Start()
{
//创建IOC容器
var container = new IOCContainer();
//注册GameManager
container.RegisterInstance(new GameManager());
//获取GameManager实例
var gameManager = container.Get<GameManager>();
//var soundManager = container.Get<SoundManager>();
//调用GameManager的Connect方法
gameManager.Connect();
}
//示例一:未注册
public class SoundManager
{
public void Connect()
{
Debug.Log("Sound连接成功");
}
}
//示例二:注册
public class GameManager
{
public void Connect()
{
Debug.Log("Game连接成功");
}
}
}
=====================================================================================