private async ValueTask BuildServices(bool isAsync, CancellationToken token = default) { var services = context.Services; var configuration = context.Configuration; services.Configuration = configuration; services.IndexFilterCompiler = new PartialIndexFilterCompiler(); if (context.ParentDomain == null) { var descriptor = ProviderDescriptor.Get(configuration.ConnectionInfo.Provider); var driverFactory = (SqlDriverFactory)Activator.CreateInstance(descriptor.DriverFactory); var handlerFactory = (HandlerFactory)Activator.CreateInstance(descriptor.HandlerFactory); var driver = isAsync ? await StorageDriver.CreateAsync(driverFactory, configuration, token).ConfigureAwait(false) : StorageDriver.Create(driverFactory, configuration); services.HandlerFactory = handlerFactory; services.StorageDriver = driver; services.NameBuilder = new NameBuilder(configuration, driver.ProviderInfo); } else { var handlers = context.ParentDomain.Handlers; services.HandlerFactory = handlers.Factory; services.StorageDriver = handlers.StorageDriver; services.NameBuilder = handlers.NameBuilder; } await CreateConnection(services, isAsync, token).ConfigureAwait(false); context.DefaultSchemaInfo = defaultSchemaInfo = isAsync ? await services.StorageDriver.GetDefaultSchemaAsync(services.Connection, token).ConfigureAwait(false) : services.StorageDriver.GetDefaultSchema(services.Connection); services.MappingResolver = MappingResolver.Create(configuration, context.NodeConfiguration, defaultSchemaInfo); BuildExternalServices(services, configuration); services.Lock(); context.TypeIdProvider = new TypeIdProvider(context); }