Files
aibis-dream/Assets/Scripts/Framework/IocContainer.cs
T
2024-11-15 01:24:07 +08:00

70 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
namespace AibisDream.Framework
{
public class IocContainer
{
private readonly Dictionary<Type, object> _container = new();
public void Register<T>(T instance)
{
var key = typeof(T);
if (_container.ContainsKey(key))
{
_container[key] = instance;
}
else
{
_container.Add(key, instance);
}
}
public T Get<T>() where T : class
{
var key = typeof(T);
if (_container.TryGetValue(key, out var retInstance))
{
return retInstance as T;
}
return null;
}
public IEnumerable<T> GetInstancesByType<T>()
{
var type = typeof(T);
return _container.Values.Where(instance => type.IsInstanceOfType(instance)).Cast<T>();
}
public void Clear() => _container.Clear();
}
public static class IocTools
{
private static readonly IocContainer IocContainer = new();
public static void RegisterIoc<T>(this object self, T instance)
{
IocContainer.Register(instance);
}
public static T GetIoc<T>(this object self) where T : class
{
return IocContainer.Get<T>();
}
public static IEnumerable<T> GetIocInstancesByType<T>()
{
return IocContainer.GetInstancesByType<T>();
}
public static void ClearIoc()
{
IocContainer.Clear();
}
}
}