Esempio n. 1
0
        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);
        }