diff --git a/src/OrchardCore/OrchardCore.Abstractions/Shell/ShellSettings.cs b/src/OrchardCore/OrchardCore.Abstractions/Shell/ShellSettings.cs
index c1e90df6218..dd225764565 100644
--- a/src/OrchardCore/OrchardCore.Abstractions/Shell/ShellSettings.cs
+++ b/src/OrchardCore/OrchardCore.Abstractions/Shell/ShellSettings.cs
@@ -27,7 +27,13 @@ public class ShellSettings : IDisposable
private readonly ShellConfiguration _settings;
private readonly ShellConfiguration _configuration;
internal volatile int _shellCreating;
- private bool _disposed;
+
+ private string _requestUrlPrefix;
+ private string _versionId;
+ private string _tenantId;
+ private string _requestUrlHost;
+ private string[] _requestUrlHosts;
+ private TenantState? _state;
///
/// Initializes a new .
@@ -67,7 +73,7 @@ public ShellSettings(ShellSettings settings)
/// Whether this instance has been disposed or not.
///
[JsonIgnore]
- public bool Disposed => _disposed;
+ public bool Disposed { get; private set; }
///
/// Whether this instance is disposable or not.
@@ -80,33 +86,33 @@ public ShellSettings(ShellSettings settings)
///
public string VersionId
{
- get => _settings["VersionId"];
+ get => _versionId ??= _settings["VersionId"];
set
{
_settings["TenantId"] ??= _settings["VersionId"] ?? value;
- _settings["VersionId"] = value;
+ _versionId = _settings["VersionId"] = value;
}
}
///
/// The tenant identifier.
///
- public string TenantId => _settings["TenantId"] ?? _settings["VersionId"];
+ public string TenantId => _tenantId ??= _settings["TenantId"] ?? _settings["VersionId"];
///
/// The tenant request url host, multiple separated hosts may be provided.
///
public string RequestUrlHost
{
- get => _settings["RequestUrlHost"];
- set => _settings["RequestUrlHost"] = value;
+ get => _requestUrlHost ??= _settings["RequestUrlHost"] ?? string.Empty;
+ set => _requestUrlHost = _settings["RequestUrlHost"] = value;
}
///
/// The tenant request url host(s).
///
[JsonIgnore]
- public string[] RequestUrlHosts => _settings["RequestUrlHost"]
+ public string[] RequestUrlHosts => _requestUrlHosts ??= _settings["RequestUrlHost"]
?.Split(HostSeparators, StringSplitOptions.RemoveEmptyEntries)
?? [];
@@ -115,8 +121,8 @@ public string RequestUrlHost
///
public string RequestUrlPrefix
{
- get => _settings["RequestUrlPrefix"]?.Trim(' ', '/');
- set => _settings["RequestUrlPrefix"] = value;
+ get => _requestUrlPrefix ??= _settings["RequestUrlPrefix"]?.Trim(' ', '/') ?? string.Empty;
+ set => _requestUrlPrefix = _settings["RequestUrlPrefix"] = value;
}
///
@@ -125,8 +131,8 @@ public string RequestUrlPrefix
[JsonConverter(typeof(JsonStringEnumConverter))]
public TenantState State
{
- get => _settings.GetValue("State");
- set => _settings["State"] = value.ToString();
+ get => _state ??= _settings.GetValue("State");
+ set => _state = Enum.Parse(_settings["State"] = value.ToString());
}
///
@@ -161,12 +167,12 @@ public void Dispose()
private void Close()
{
- if (_disposed)
+ if (Disposed)
{
return;
}
- _disposed = true;
+ Disposed = true;
_settings?.Release();
_configuration?.Release();