Fix logic with tenant cache

Don't cache the environment if default shell settings was created

Also display error if "/tenant" switch specifies a non existing
tenant name.

--HG--
branch : dev
This commit is contained in:
Renaud Paquay
2010-04-28 22:40:20 -07:00
parent 6c75b28a81
commit 6e960d8906

View File

@@ -100,28 +100,32 @@ namespace Orchard.Commands {
} }
public IStandaloneEnvironment FindOrCreateTenant(string tenant) { public IStandaloneEnvironment FindOrCreateTenant(string tenant) {
if (!_tenants.ContainsKey(tenant)) { IStandaloneEnvironment result;
var host = _hostContainer.Resolve<IOrchardHost>(); if (_tenants.TryGetValue(tenant, out result))
var tenantManager = _hostContainer.Resolve<IShellSettingsManager>(); return result;
var host = _hostContainer.Resolve<IOrchardHost>();
var tenantManager = _hostContainer.Resolve<IShellSettingsManager>();
// Retrieve settings for speficified tenant. In case of an unitiliazed site (no // Retrieve settings for speficified tenant.
// settings anywhere), we create a default settings instance. var settingsList = tenantManager.LoadSettings();
var settingsList = tenantManager.LoadSettings(); if (settingsList.Any()) {
ShellSettings settings; var settings = settingsList.SingleOrDefault(s => String.Equals(s.Name, tenant, StringComparison.OrdinalIgnoreCase));
if (settingsList.Any()) { if (settings == null) {
settings = tenantManager.LoadSettings().Single(s => String.Equals(s.Name, tenant, StringComparison.OrdinalIgnoreCase)); throw new OrchardException(string.Format("Tenant {0} does not exist", tenant));
}
else {
settings = new ShellSettings {Name = "Default", State = new TenantState("Uninitialized")};
} }
var env = host.CreateStandaloneEnvironment(settings); var env = host.CreateStandaloneEnvironment(settings);
// Store in cache for next calls // Store in cache for next calls
_tenants.Add(tenant, env); _tenants.Add(tenant, env);
return env;
}
else {
// In case of an unitiliazed site (no default settings yet), we create a default settings instance.
var settings = new ShellSettings {Name = "Default", State = new TenantState("Uninitialized")};
return host.CreateStandaloneEnvironment(settings);
} }
return _tenants[tenant];
} }