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