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:
Louis DeJardin
2010-04-23 17:05:28 -07:00
parent 5fb845dcc9
commit 0c6ae8b8d7
19 changed files with 254 additions and 24 deletions

View File

@@ -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

View File

@@ -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.

View File

@@ -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; }
}
}

View File

@@ -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>