IOC容器

namespace Feng.FramWorkDesign
{
public class IOCContainer
{
private Dictionary<Type, object> mInstance = new Dictionary<Type, object>();

public void Register<T>(T instance)
{
var key = typeof(T);
if (mInstance.ContainsKey(key))
{
mInstance[key] = instance;
}
else
{
mInstance.Add(key,instance);
}
}

public T Get<T>() where T : class
{
var key = typeof(T);
if (mInstance.TryGetValue(key,out var retInstance))
{
return retInstance as T;
}
return null;
}
}
}

-----------------------------------------------------------------------
使用方法
namespace Feng.FramWorkDesign
{
public class IOCExample : MonoBehaviour
{
private void Start()
{
//创建一个IOC容器
var container = new IOCContainer();

//注册一个实例
container.Register(new BluetoothManager());

//根据类型获取实例
var bluetoothManager = container.Get<BluetoothManager>();

//实现方法
bluetoothManager.Connect();
}


}

public class BluetoothManager
{
public void Connect()
{
Debug.Log("链接成功");
}
}
}

-----------------------------------------------------------------------
优化使用
namespace Feng.FramWorkDesign
{
/// <summary>
/// 工具类 与IOCContainer结合使用
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class Architecture<T> where T:Architecture<T>,new()
{
private static T mArchitecture;

static void MakeSureArchitecture()
{
if (mArchitecture==null)
{
mArchitecture = new T();
mArchitecture.Init();
}
}
protected abstract void Init();

private IOCContainer mContainer = new IOCContainer();

public static T Get<T>() where T : class
{
MakeSureArchitecture();
return mArchitecture.mContainer.Get<T>();
}

/// <summary>
/// 在子类当中注册
/// </summary>
/// <param name="instance"></param>
/// <typeparam name="T"></typeparam>
public void Register<T>(T instance)
{
MakeSureArchitecture();
mArchitecture.mContainer.Register<T>(instance);
}
}
}
-------------------------------------------------------------
子类继承使用
namespace Feng.FramWorkDesign
{
public class PointGame:Architecture<PointGame>
{
protected override void Init()
{
Register(new GameModel());
}
}
}
posted @ 2023-08-24 17:50  Trigger_F  阅读(8)  评论(0编辑  收藏  举报