/// <summary>
        /// 自动注册模块所在程序集中导出的服务
        /// </summary>
        /// <param name="moduleInstance"></param>
        /// <param name="context"></param>
        protected virtual async Task AutoRegisterModuleServicesAsync(object moduleInstance, AutoRegisterModuleServicesContext context)
        {
            var moduleType = moduleInstance.GetType();

            if (!moduleType.ShouldRegisterServicesInAssembly())
            {
                return;
            }
            var assembly = moduleType.Assembly;

            if (context.ProcessedAssemblies.Contains(assembly))
            {
                return;
            }

            if (!await _modulesBootstrapInterceptor.RegisteringServicesInAssemblyAsync(context.Services, assembly))
            {
                return;
            }

            var autoRegisterServicesInAssemblyAttribute = moduleType.GetCustomAttribute <AutoRegisterServicesInAssemblyAttribute>();

            var serviceRegistrar = autoRegisterServicesInAssemblyAttribute?.ServiceRegistrarType is null
                                        ? context.Services.GetSingletonServiceInstance <IServiceRegistrar>() ?? throw new ModularityException($"cannot get {nameof(IServiceRegistrar)} instance in context's {nameof(IServiceCollection)}")
                                        : autoRegisterServicesInAssemblyAttribute.ServiceRegistrarType.ConstructInstance <IServiceRegistrar>();

            try
            {
                serviceRegistrar.AddAssembly(context.Services, assembly);
            }
            catch (Exception ex)
            {
                throw new AutoRegisterServiceException(moduleType, serviceRegistrar.GetType(), ex);
            }

            context.ProcessedAssemblies.Add(assembly);
        }
        /// <inheritdoc cref="IConfigureServices"/>
        protected virtual async Task ConfigureModuleServicesAsync(ServiceConfigurationContext context, AutoRegisterModuleServicesContext autoRegisterContext, object moduleInstance)
        {
            await AutoRegisterModuleServicesAsync(moduleInstance, autoRegisterContext);

            if (!await _modulesBootstrapInterceptor.ConfigureModuleServicesAsync(context, moduleInstance))
            {
                return;
            }

            if (moduleInstance is IConfigureServices configureServices)
            {
                configureServices.ConfigureServices(context);
            }
            if (moduleInstance is IConfigureServicesAsync configureServicesAsync)
            {
                await configureServicesAsync.ConfigureServicesAsync(context);
            }
        }