mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 11:44:58 +08:00
Nearly working integration of multi tenancy components
Tenant service provides refresh signal to host (temporary need) Setup module changed to run in any named shell that is uninitialized Table prefix added to setup form (for when sql server option is selected) CreateSetupContext takes shellsettings to support uninitialized tenants Removed name on default route provider - adding several routes by same name not allowed in single appdomain --HG-- branch : dev
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
using System.Collections.Generic;
|
||||
using Orchard.Environment;
|
||||
using Orchard.Environment.Configuration;
|
||||
|
||||
namespace Orchard.MultiTenancy.Services {
|
||||
public class TenantService : ITenantService {
|
||||
private readonly IShellSettingsManager _shellSettingsManager;
|
||||
private readonly IOrchardHost _orchardHost;
|
||||
|
||||
public TenantService(IShellSettingsManager shellSettingsManager) {
|
||||
public TenantService(IShellSettingsManager shellSettingsManager, IOrchardHost orchardHost) {
|
||||
_shellSettingsManager = shellSettingsManager;
|
||||
_orchardHost = orchardHost;
|
||||
}
|
||||
|
||||
#region Implementation of ITenantService
|
||||
@@ -17,6 +20,10 @@ namespace Orchard.MultiTenancy.Services {
|
||||
|
||||
public void CreateTenant(ShellSettings settings) {
|
||||
_shellSettingsManager.SaveSettings(settings);
|
||||
|
||||
|
||||
// MultiTenancy: This will not be needed when host listens to event bus
|
||||
_orchardHost.Reinitialize_Obsolete();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@@ -23,6 +23,7 @@ using Orchard.UI.Notify;
|
||||
namespace Orchard.Setup.Controllers {
|
||||
[ValidateInput(false)]
|
||||
public class SetupController : Controller {
|
||||
private readonly ShellSettings _shellSettings;
|
||||
private readonly INotifier _notifier;
|
||||
private readonly IOrchardHost _orchardHost;
|
||||
private readonly IShellSettingsManager _shellSettingsManager;
|
||||
@@ -31,12 +32,14 @@ namespace Orchard.Setup.Controllers {
|
||||
private readonly IAppDataFolder _appDataFolder;
|
||||
|
||||
public SetupController(
|
||||
ShellSettings shellSettings,
|
||||
INotifier notifier,
|
||||
IOrchardHost orchardHost,
|
||||
IShellSettingsManager shellSettingsManager,
|
||||
IShellContainerFactory shellContainerFactory,
|
||||
ICompositionStrategy compositionStrategy,
|
||||
IAppDataFolder appDataFolder) {
|
||||
_shellSettings = shellSettings;
|
||||
_notifier = notifier;
|
||||
_orchardHost = orchardHost;
|
||||
_shellSettingsManager = shellSettingsManager;
|
||||
@@ -75,10 +78,10 @@ namespace Orchard.Setup.Controllers {
|
||||
}
|
||||
|
||||
try {
|
||||
var shellSettings = new ShellSettings {
|
||||
Name = "Default",
|
||||
var shellSettings = new ShellSettings(_shellSettings) {
|
||||
DataProvider = model.DatabaseOptions ? "SQLite" : "SqlServer",
|
||||
DataConnectionString = model.DatabaseConnectionString
|
||||
DataConnectionString = model.DatabaseConnectionString,
|
||||
DataTablePrefix = model.DatabaseTablePrefix,
|
||||
};
|
||||
|
||||
// The vanilla Orchard distibution has the following modules enabled.
|
||||
@@ -99,10 +102,10 @@ namespace Orchard.Setup.Controllers {
|
||||
var bootstrapLifetimeScope = _shellContainerFactory.CreateContainer(shellSettings, shellToplogy);
|
||||
using (var environment = new StandaloneEnvironment(bootstrapLifetimeScope)) {
|
||||
environment.Resolve<ISessionFactoryHolder>().CreateDatabase();
|
||||
|
||||
|
||||
environment.Resolve<IShellDescriptorManager>().UpdateShellDescriptor(
|
||||
0,
|
||||
shellDescriptor.EnabledFeatures,
|
||||
0,
|
||||
shellDescriptor.EnabledFeatures,
|
||||
shellDescriptor.Parameters);
|
||||
}
|
||||
|
||||
@@ -110,6 +113,9 @@ namespace Orchard.Setup.Controllers {
|
||||
// creating a standalone environment.
|
||||
// in theory this environment can be used to resolve any normal components by interface, and those
|
||||
// components will exist entirely in isolation - no crossover between the safemode container currently in effect
|
||||
|
||||
// must mark state as Running - otherwise standalone enviro is created "for setup"
|
||||
shellSettings.State = new TenantState("Running");
|
||||
using (var environment = _orchardHost.CreateStandaloneEnvironment(shellSettings)) {
|
||||
try {
|
||||
// create superuser
|
||||
@@ -165,9 +171,9 @@ namespace Orchard.Setup.Controllers {
|
||||
}
|
||||
}
|
||||
|
||||
shellSettings.State = new TenantState("Running");
|
||||
_shellSettingsManager.SaveSettings(shellSettings);
|
||||
|
||||
// MultiTenancy: This will not be needed when host listens to event bus
|
||||
_orchardHost.Reinitialize_Obsolete();
|
||||
|
||||
// redirect to the welcome page.
|
||||
|
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using Orchard.Setup.Annotations;
|
||||
using Orchard.Mvc.ViewModels;
|
||||
@@ -17,5 +18,7 @@ namespace Orchard.Setup.ViewModels {
|
||||
public bool DatabaseOptions { get; set; }
|
||||
[SqlDatabaseConnectionString]
|
||||
public string DatabaseConnectionString { get; set; }
|
||||
|
||||
public string DatabaseTablePrefix { get; set; }
|
||||
}
|
||||
}
|
@@ -35,6 +35,10 @@ using (Html.BeginFormAntiForgeryPost()) { %>
|
||||
<%=Html.EditorFor(svm => svm.DatabaseConnectionString)%>
|
||||
<span class="hint"><%=_Encoded("Example:") %><br /><%=_Encoded("Data Source=sqlServerName;Initial Catalog=dbName;Persist Security Info=True;User ID=userName;Password=password") %></span>
|
||||
</span>
|
||||
<span data-controllerid="sql">
|
||||
<label for="DatabaseTablePrefix"><%=_Encoded("Database Table Prefix") %></label>
|
||||
<%=Html.EditorFor(svm => svm.DatabaseTablePrefix)%>
|
||||
</span>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
|
Reference in New Issue
Block a user