using System;
using System.Threading.Tasks;

namespace JiShe.CollectBus.DynamicModule
{
    /// <summary>
    /// 提供动态管理ABP模块的功能
    /// </summary>
    public interface IDynamicModuleManager
    {
        /// <summary>
        /// 获取已注册的模块类型
        /// </summary>
        /// <returns>当前应用程序中已注册的所有模块类型</returns>
        Type[] GetRegisteredModuleTypes();

        /// <summary>
        /// 重新初始化指定的模块
        /// </summary>
        /// <param name="moduleType">要重新初始化的模块类型</param>
        /// <returns>表示异步操作的任务</returns>
        Task ReinitializeModuleAsync(Type moduleType);

        /// <summary>
        /// 卸载指定的模块
        /// </summary>
        /// <param name="moduleType">要卸载的模块类型</param>
        /// <returns>表示异步操作的任务</returns>
        Task UnloadModuleAsync(Type moduleType);

        /// <summary>
        /// 检查模块是否已加载
        /// </summary>
        /// <param name="moduleType">要检查的模块类型</param>
        /// <returns>如果模块已加载，则为true；否则为false</returns>
        bool IsModuleLoaded(Type moduleType);

        /// <summary>
        /// 根据模块名称获取模块类型
        /// </summary>
        /// <param name="moduleName">模块名称</param>
        /// <returns>模块类型，如果找不到则为null</returns>
        Type GetModuleTypeByName(string moduleName);
    }
}