/// <summary> /// Creates a shell context based on shell settings /// </summary> public Task <ShellContext> CreateShellContextAsync(ShellSettings settings) { if (settings.State == TenantState.Uninitialized) { if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug("Creating shell context for tenant {0} setup", settings.Name); } return(_shellContextFactory.CreateSetupContextAsync(settings)); } else if (settings.State == TenantState.Disabled) { if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug("Creating disabled shell context for tenant {0} setup", settings.Name); } return(Task.FromResult(new ShellContext { Settings = settings })); } else if (settings.State == TenantState.Running || settings.State == TenantState.Initializing) { if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug("Creating shell context for tenant {0}", settings.Name); } return(_shellContextFactory.CreateShellContextAsync(settings)); } else { throw new InvalidOperationException("Unexpected shell state for " + settings.Name); } }