# IXncfRegister 接口

    public interface IXncfRegister
    {
        /// <summary>
        /// 是否忽略安装(但不影响执行注册代码)
        /// </summary>
        bool IgnoreInstall { get; }

        /// <summary>
        /// 模块名称,要求全局唯一
        /// </summary>
        string Name { get; }

        /// <summary>
        /// 编号,要求全局唯一
        /// </summary>
        string Uid { get; }

        /// <summary>
        /// 版本号
        /// </summary>
        string Version { get; }

        /// <summary>
        /// 菜单名称
        /// </summary>
        string MenuName { get; }

        /// <summary>
        /// Icon图标
        /// </summary>
        string Icon { get; }

        /// <summary>
        /// 说明
        /// </summary>
        string Description { get; }

        /// <summary>
        /// 注册方法,注册的顺序决定了界面中排列的顺序
        /// </summary>
        IList<Type> Functions { get; }

        /// <summary>
        /// 添加 AutoMap 映射
        /// </summary>
        ConcurrentBag<Action<Profile>> AutoMapMappingConfigs { get; set; }

        /// <summary>
        /// 获取当前模块的已注册线程信息
        /// </summary>
        IEnumerable<KeyValuePair<ThreadInfo, Thread>> RegisteredThreadInfo { get; }

        /// <summary>
        /// 安装代码
        /// </summary>
        Task InstallOrUpdateAsync(IServiceProvider serviceProvider, InstallOrUpdate installOrUpdate);

        /// <summary>
        /// 卸载代码
        /// </summary>
        Task UninstallAsync(IServiceProvider serviceProvider, Func<Task> unsinstallFunc);

        /// <summary>
        /// 获取首页Url
        /// <para>仅限实现了 IAreaRegister 接口之后的 Register,否则将返回 null</para>
        /// </summary>
        /// <returns></returns>
        string GetAreaHomeUrl();

        /// <summary>
        /// 获取 Area 其他页面的 URL
        /// </summary>
        /// <param name="path">URL 路径(不带 uid 参数)</param>
        /// <returns></returns>
        string GetAreaUrl(string path);

        /// <summary>
        /// 在 ConfigureServices 启动时注册当前模块
        /// </summary>
        /// <param name="services">IServiceCollection</param>
        /// <param name="configuration">Configuration</param>
        /// <returns></returns>
        IServiceCollection AddXncfModule(IServiceCollection services, IConfiguration configuration);

        /// <summary>
        /// 添加AutoMap的映射关系
        /// </summary>
        /// <param name="mapping"></param>
        void AddAutoMapMapping(Action<Profile> mapping);

        /// <summary>
        /// 在 startup.cs 的 Configure() 方法中执行配置
        /// </summary>
        /// <param name="app"></param>
        /// <param name="registerService">CO2NET 注册对象</param>
        /// <returns></returns>
        IApplicationBuilder UseXncfModule(IApplicationBuilder app, IRegisterService registerService);
    }