// Copyright (c) 2025-2026 GeWuYou // SPDX-License-Identifier: Apache-2.0 using GFramework.Core.Abstractions.Utility; namespace GFramework.Core.Abstractions.Resource; /// /// 资源管理器接口,提供资源加载、缓存和卸载功能 /// 线程安全:所有方法都是线程安全的 /// public interface IResourceManager : IUtility { /// /// 获取已加载资源的数量 /// int LoadedResourceCount { get; } /// /// 同步加载资源 /// /// 资源类型 /// 资源路径 /// 资源实例,如果加载失败返回 null T? Load(string path) where T : class; /// /// 异步加载指定路径的资源,并在缓存中对并发加载进行去重。 /// /// 资源类型 /// 资源路径,不能为空或空白。 /// 加载成功返回资源实例;加载失败返回 /// 为空或空白时抛出。 /// 当未注册对应资源加载器时抛出。 /// 实现内部可能使用 ConfigureAwait(false),异步延续不保证回到调用线程。 Task LoadAsync(string path) where T : class; /// /// 获取资源句柄(增加引用计数) /// /// 资源类型 /// 资源路径 /// 资源句柄 IResourceHandle? GetHandle(string path) where T : class; /// /// 卸载指定路径的资源 /// /// 资源路径 /// 如果成功卸载返回 true,否则返回 false bool Unload(string path); /// /// 卸载所有资源 /// void UnloadAll(); /// /// 检查资源是否已加载 /// /// 资源路径 /// 如果已加载返回 true,否则返回 false bool IsLoaded(string path); /// /// 注册资源加载器 /// /// 资源类型 /// 资源加载器 void RegisterLoader(IResourceLoader loader) where T : class; /// /// 取消注册资源加载器 /// /// 资源类型 void UnregisterLoader() where T : class; /// /// 预加载资源到缓存中。 /// /// 资源类型 /// 资源路径,不能为空或空白。 /// 表示预加载流程完成的任务。 /// 为空或空白时抛出。 /// 当未注册对应资源加载器时抛出。 /// 内部委托给 ,同样不捕获同步上下文。 Task PreloadAsync(string path) where T : class; /// /// 获取所有已加载资源的路径 /// IEnumerable GetLoadedResourcePaths(); /// /// 设置资源释放策略 /// /// 资源释放策略 void SetReleaseStrategy(IResourceReleaseStrategy strategy); }