using XFEExtension.NetCore.WinUIHelper.Implements.Services; using XFEExtension.NetCore.WinUIHelper.Interface.Services; namespace XFEExtension.NetCore.WinUIHelper.Utilities; /// /// 服务管理器 /// public static class ServiceManager { private static readonly List globalServices = []; private static readonly Dictionary> services = new() { { nameof(INavigationService), () => new AutoNavigationService() } }; /// /// 注册全局服务 /// /// 全局服务 public static void RegisterGlobalService(IGlobalService service) => globalServices.Add(service); /// /// 注册服务 /// public static void RegisterService(Func ctr) => services.Add(nameof(T), ctr); /// /// 获取全局服务 /// /// 全局服务泛型 /// public static T? GetGlobalService() where T : IGlobalService => globalServices.OfType().FirstOrDefault(); /// /// 获取全局服务 /// /// 全局服务泛型 /// public static List GetGlobalServices() where T : IGlobalService => [.. globalServices.OfType()]; /// /// 获取服务 /// /// /// public static T GetService() { var type = typeof(T); if (type.IsGenericType) return (T?)Activator.CreateInstance((type.Assembly.GetTypes().Where(t => t.Name == type.Name![1..]).FirstOrDefault() ?? throw new NullReferenceException("无法找到指定服务的实现类")).MakeGenericType(type.GenericTypeArguments)) ?? throw new NullReferenceException("无法找到指定服务的实现类"); var typeName = typeof(T).Name; if (services.TryGetValue(typeName, out var ctr)) return (T)ctr(); else return (T?)Activator.CreateInstance(type.Assembly.GetTypes().Where(t => t.Name == type.Name![1..]).FirstOrDefault() ?? throw new NullReferenceException("无法找到指定服务的实现类")) ?? throw new NullReferenceException("无法找到指定服务的实现类"); } }