mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
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:
@@ -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];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user