コード例 #1
0
        public async Task AddSourcesAsync(IConfigurationBuilder builder)
        {
            DatabaseShellsSettings document;

            using var context = await _shellContextFactory.GetDatabaseContextAsync(_options);

            using (var scope = context.ServiceProvider.CreateScope())
            {
                var session = scope.ServiceProvider.GetRequiredService <ISession>();

                document = await session.Query <DatabaseShellsSettings>().FirstOrDefaultAsync();

                if (document == null)
                {
                    document = new DatabaseShellsSettings();

                    if (!_options.MigrateFromFiles || !await TryMigrateFromFileAsync(document))
                    {
                        return;
                    }

                    session.Save(document, checkConcurrency: true);
                }
            }

            builder.AddJsonStream(new MemoryStream(Encoding.UTF8.GetBytes(document.ShellsSettings.ToString(Formatting.None))));
        }
コード例 #2
0
        public async Task AddSourcesAsync(string tenant, IConfigurationBuilder builder)
        {
            JObject configurations = null;

            using var context = await _shellContextFactory.GetDatabaseContextAsync(_options);

            await context.CreateScope().UsingServiceScopeAsync(async scope =>
            {
                var session = scope.ServiceProvider.GetRequiredService <ISession>();

                var document = await session.Query <DatabaseShellConfigurations>().FirstOrDefaultAsync();

                if (document != null)
                {
                    configurations = document.ShellConfigurations;
                }
                else
                {
                    document       = new DatabaseShellConfigurations();
                    configurations = new JObject();
                }

                if (!configurations.ContainsKey(tenant))
                {
                    if (!_options.MigrateFromFiles || !await TryMigrateFromFileAsync(tenant, configurations))
                    {
                        return;
                    }

                    document.ShellConfigurations = configurations;

                    session.Save(document, checkConcurrency: true);
                }
            });

            var configuration = configurations.GetValue(tenant) as JObject;

            if (configuration != null)
            {
                builder.AddJsonStream(new MemoryStream(Encoding.UTF8.GetBytes(configuration.ToString(Formatting.None))));
            }
        }