diff --git a/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs b/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs index bd92425da..a0380c066 100644 --- a/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs +++ b/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs @@ -37,7 +37,7 @@ namespace Orchard.Tests.Environment { builder => { //builder.RegisterModule(new ImplicitCollectionSupportModule()); builder.RegisterType().As().InstancePerLifetimeScope(); - builder.RegisterType().As().InstancePerLifetimeScope(); + builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().SingleInstance(); builder.RegisterType().As(); builder.RegisterType().As(); @@ -56,14 +56,14 @@ namespace Orchard.Tests.Environment { } public class StubShellSettingsLoader : ITenantManager { - private readonly List _shellSettings = new List + private readonly List _shellSettings = new List {new ShellSettings {Name = "testing"}}; - public IEnumerable LoadSettings() { + public IEnumerable LoadSettings() { return _shellSettings.AsEnumerable(); } - public void SaveSettings(IShellSettings settings) { + public void SaveSettings(ShellSettings settings) { _shellSettings.Add(settings); } } @@ -77,7 +77,7 @@ namespace Orchard.Tests.Environment { return Enumerable.Empty(); } - public ShellTopology GetExtensionsTopology() { + public ShellTopology_Obsolete GetExtensionsTopology() { throw new NotImplementedException(); } @@ -99,7 +99,7 @@ namespace Orchard.Tests.Environment { Assert.That(_controllerBuilder.GetControllerFactory(), Is.TypeOf()); } - public class StubCompositionStrategy : ICompositionStrategy { + public class StubCompositionStrategy : ICompositionStrategy_Obsolete { public IEnumerable GetModuleTypes() { return Enumerable.Empty(); } diff --git a/src/Orchard.Tests/Mvc/Routes/StandardExtensionRouteProviderTests.cs b/src/Orchard.Tests/Mvc/Routes/StandardExtensionRouteProviderTests.cs index a61b70ad7..9199276a5 100644 --- a/src/Orchard.Tests/Mvc/Routes/StandardExtensionRouteProviderTests.cs +++ b/src/Orchard.Tests/Mvc/Routes/StandardExtensionRouteProviderTests.cs @@ -54,7 +54,7 @@ namespace Orchard.Tests.Mvc.Routes { }; } - public ShellTopology GetExtensionsTopology() { + public ShellTopology_Obsolete GetExtensionsTopology() { throw new NotImplementedException(); } diff --git a/src/Orchard/Data/SessionFactoryHolder.cs b/src/Orchard/Data/SessionFactoryHolder.cs index 70c4fe60e..8ec6e2f32 100644 --- a/src/Orchard/Data/SessionFactoryHolder.cs +++ b/src/Orchard/Data/SessionFactoryHolder.cs @@ -14,16 +14,16 @@ namespace Orchard.Data { } public class SessionFactoryHolder : ISessionFactoryHolder { - private readonly IShellSettings _shellSettings; - private readonly ICompositionStrategy _compositionStrategy; + private readonly ShellSettings _shellSettings; + private readonly ICompositionStrategy_Obsolete _compositionStrategy; private readonly ISessionFactoryBuilder _sessionFactoryBuilder; private readonly IAppDataFolder _appDataFolder; private ISessionFactory _sessionFactory; public SessionFactoryHolder( - IShellSettings shellSettings, - ICompositionStrategy compositionStrategy, + ShellSettings shellSettings, + ICompositionStrategy_Obsolete compositionStrategy, ISessionFactoryBuilder sessionFactoryBuilder, IAppDataFolder appDataFolder) { _shellSettings = shellSettings; diff --git a/src/Orchard/Environment/Configuration/AzureBlobTenantManager.cs b/src/Orchard/Environment/Configuration/AzureBlobTenantManager.cs index 778339afd..51270363a 100644 --- a/src/Orchard/Environment/Configuration/AzureBlobTenantManager.cs +++ b/src/Orchard/Environment/Configuration/AzureBlobTenantManager.cs @@ -9,11 +9,11 @@ namespace Orchard.Environment.Configuration { public string Foo { get; set; } - public IEnumerable LoadSettings() { + public IEnumerable LoadSettings() { throw new NotImplementedException(); } - public void SaveSettings(IShellSettings settings) { + public void SaveSettings(ShellSettings settings) { throw new NotImplementedException(); } } diff --git a/src/Orchard/Environment/Configuration/DefaultTenantManager.cs b/src/Orchard/Environment/Configuration/DefaultTenantManager.cs index 05e4b61f0..587c49821 100644 --- a/src/Orchard/Environment/Configuration/DefaultTenantManager.cs +++ b/src/Orchard/Environment/Configuration/DefaultTenantManager.cs @@ -15,11 +15,11 @@ namespace Orchard.Environment.Configuration { T = NullLocalizer.Instance; } - IEnumerable ITenantManager.LoadSettings() { + IEnumerable ITenantManager.LoadSettings() { return LoadSettings().ToArray(); } - void ITenantManager.SaveSettings(IShellSettings settings) { + void ITenantManager.SaveSettings(ShellSettings settings) { if (settings == null) throw new ArgumentException(T("There are no settings to save.").ToString()); if (string.IsNullOrEmpty(settings.Name)) @@ -29,7 +29,7 @@ namespace Orchard.Environment.Configuration { _appDataFolder.CreateFile(filePath, ComposeSettings(settings)); } - IEnumerable LoadSettings() { + IEnumerable LoadSettings() { var filePaths = _appDataFolder .ListDirectories("Sites") .SelectMany(path => _appDataFolder.ListFiles(path)) @@ -47,7 +47,7 @@ namespace Orchard.Environment.Configuration { public string DataPrefix { get; set; } } - static IShellSettings ParseSettings(string text) { + static ShellSettings ParseSettings(string text) { var ser = new YamlSerializer(); var content = ser.Deserialize(text, typeof(Content)).Cast().Single(); return new ShellSettings { @@ -58,7 +58,7 @@ namespace Orchard.Environment.Configuration { }; } - static string ComposeSettings(IShellSettings settings) { + static string ComposeSettings(ShellSettings settings) { if (settings == null) return ""; diff --git a/src/Orchard/Environment/Configuration/ITenantManager.cs b/src/Orchard/Environment/Configuration/ITenantManager.cs index 67da12e5b..aa512a07a 100644 --- a/src/Orchard/Environment/Configuration/ITenantManager.cs +++ b/src/Orchard/Environment/Configuration/ITenantManager.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; namespace Orchard.Environment.Configuration { public interface ITenantManager { - IEnumerable LoadSettings(); - void SaveSettings(IShellSettings settings); + IEnumerable LoadSettings(); + void SaveSettings(ShellSettings settings); } } \ No newline at end of file diff --git a/src/Orchard/Environment/Configuration/ShellSettings.cs b/src/Orchard/Environment/Configuration/ShellSettings.cs index 342aef8b5..b97d40653 100644 --- a/src/Orchard/Environment/Configuration/ShellSettings.cs +++ b/src/Orchard/Environment/Configuration/ShellSettings.cs @@ -1,12 +1,5 @@ namespace Orchard.Environment.Configuration { - public interface IShellSettings { - string Name { get; } - string DataProvider { get; } - string DataConnectionString { get; } - string DataPrefix { get; } - } - - public class ShellSettings : IShellSettings { + public class ShellSettings { public string Name { get; set; } public string DataProvider { get; set; } public string DataConnectionString { get; set; } diff --git a/src/Orchard/Environment/DefaultCompositionStrategy.cs b/src/Orchard/Environment/DefaultCompositionStrategy.cs index 230f279b8..47e50edbe 100644 --- a/src/Orchard/Environment/DefaultCompositionStrategy.cs +++ b/src/Orchard/Environment/DefaultCompositionStrategy.cs @@ -12,7 +12,7 @@ using Orchard.Extensions.Records; namespace Orchard.Environment { //TEMP: This will be replaced by packaging system - public interface ICompositionStrategy { + public interface ICompositionStrategy_Obsolete { IEnumerable GetModuleTypes(); IEnumerable GetDependencyTypes(); IEnumerable GetRecordDescriptors(); @@ -23,7 +23,7 @@ namespace Orchard.Environment { public string Prefix { get; set; } } - public class DefaultCompositionStrategy : ICompositionStrategy { + public class DefaultCompositionStrategy : ICompositionStrategy_Obsolete { private readonly IExtensionManager _extensionManager; public DefaultCompositionStrategy(IExtensionManager extensionManager) { diff --git a/src/Orchard/Environment/DefaultOrchardHost.cs b/src/Orchard/Environment/DefaultOrchardHost.cs index 0dd3e0f90..33b0955c9 100644 --- a/src/Orchard/Environment/DefaultOrchardHost.cs +++ b/src/Orchard/Environment/DefaultOrchardHost.cs @@ -13,7 +13,7 @@ namespace Orchard.Environment { public class DefaultOrchardHost : IOrchardHost { private readonly IContainerProvider _containerProvider; private readonly ControllerBuilder _controllerBuilder; - private readonly IEnumerable _shellContainerFactories; + private readonly IEnumerable _shellContainerFactories; private readonly ITenantManager _tenantManager; private IOrchardShell _current; @@ -23,7 +23,7 @@ namespace Orchard.Environment { IContainerProvider containerProvider, ITenantManager tenantManager, ControllerBuilder controllerBuilder, - IEnumerable shellContainerFactories) { + IEnumerable shellContainerFactories) { _containerProvider = containerProvider; _tenantManager = tenantManager; _controllerBuilder = controllerBuilder; @@ -58,7 +58,7 @@ namespace Orchard.Environment { EndRequest(); } - IStandaloneEnvironment IOrchardHost.CreateStandaloneEnvironment(IShellSettings shellSettings) { + IStandaloneEnvironment IOrchardHost.CreateStandaloneEnvironment(ShellSettings shellSettings) { var shellContainer = CreateShellContainer(shellSettings); return new StandaloneEnvironment(shellContainer); } @@ -105,7 +105,7 @@ namespace Orchard.Environment { return CreateShellContainer(null); } - private ILifetimeScope CreateShellContainer(IShellSettings shellSettings) { + private ILifetimeScope CreateShellContainer(ShellSettings shellSettings) { foreach (var factory in _shellContainerFactories) { var container = factory.CreateContainer(shellSettings); if (container != null) { diff --git a/src/Orchard/Environment/IOrchardHost.cs b/src/Orchard/Environment/IOrchardHost.cs index c8d4c1f7d..de957fec9 100644 --- a/src/Orchard/Environment/IOrchardHost.cs +++ b/src/Orchard/Environment/IOrchardHost.cs @@ -26,6 +26,6 @@ namespace Orchard.Environment { /// Can be used to build an temporary self-contained instance of a shell's configured code. /// Services may be resolved from within this instance to configure and initialize it's storage. /// - IStandaloneEnvironment CreateStandaloneEnvironment(IShellSettings shellSettings); + IStandaloneEnvironment CreateStandaloneEnvironment(ShellSettings shellSettings); } } diff --git a/src/Orchard/Environment/OrchardStarter.cs b/src/Orchard/Environment/OrchardStarter.cs index ddef2d40c..885bb9c94 100644 --- a/src/Orchard/Environment/OrchardStarter.cs +++ b/src/Orchard/Environment/OrchardStarter.cs @@ -18,11 +18,11 @@ namespace Orchard.Environment { // a single default host implementation is needed for bootstrapping a web app domain builder.RegisterType().As().SingleInstance(); - builder.RegisterType().As().SingleInstance(); - builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); builder.RegisterType().As().SingleInstance(); builder.RegisterType().As().SingleInstance(); - builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); // The container provider gives you access to the lowest container at the time, // and dynamically creates a per-request container. The EndRequestLifetime method diff --git a/src/Orchard/Environment/ShellBuilders/DefaultShellContainerFactory.cs b/src/Orchard/Environment/ShellBuilders/DefaultShellContainerFactory.cs index fd7412ff1..a8bbafbf9 100644 --- a/src/Orchard/Environment/ShellBuilders/DefaultShellContainerFactory.cs +++ b/src/Orchard/Environment/ShellBuilders/DefaultShellContainerFactory.cs @@ -6,16 +6,16 @@ using Orchard.Environment.AutofacUtil.DynamicProxy2; using Orchard.Environment.Configuration; namespace Orchard.Environment.ShellBuilders { - public class DefaultShellContainerFactory : IShellContainerFactory { + public class DefaultShellContainerFactory : IShellContainerFactory_Obsolete { private readonly IContainer _container; - private readonly ICompositionStrategy _compositionStrategy; + private readonly ICompositionStrategy_Obsolete _compositionStrategy; - public DefaultShellContainerFactory(IContainer container, ICompositionStrategy compositionStrategy) { + public DefaultShellContainerFactory(IContainer container, ICompositionStrategy_Obsolete compositionStrategy) { _container = container; _compositionStrategy = compositionStrategy; } - public virtual ILifetimeScope CreateContainer(IShellSettings settings) { + public virtual ILifetimeScope CreateContainer(ShellSettings settings) { // null settings means we need to defer to the setup container factory if (settings == null) { return null; @@ -25,7 +25,7 @@ namespace Orchard.Environment.ShellBuilders { // add module types to container being built var addingModulesAndServices = new ContainerUpdater(); - addingModulesAndServices.RegisterInstance(settings).As(); + addingModulesAndServices.RegisterInstance(settings).As(); addingModulesAndServices.RegisterInstance(dynamicProxyContext); addingModulesAndServices.RegisterType().As().SingleInstance(); diff --git a/src/Orchard/Environment/ShellBuilders/IShellContainerFactory.cs b/src/Orchard/Environment/ShellBuilders/IShellContainerFactory.cs index cd7e80871..ca1dd4d0e 100644 --- a/src/Orchard/Environment/ShellBuilders/IShellContainerFactory.cs +++ b/src/Orchard/Environment/ShellBuilders/IShellContainerFactory.cs @@ -1,8 +1,13 @@ using Autofac; using Orchard.Environment.Configuration; +using Orchard.Environment.Topology.Models; namespace Orchard.Environment.ShellBuilders { public interface IShellContainerFactory { - ILifetimeScope CreateContainer(IShellSettings settings); + ILifetimeScope CreateContainer(ShellTopology topology); + } + + public interface IShellContainerFactory_Obsolete { + ILifetimeScope CreateContainer(ShellSettings settings); } } \ No newline at end of file diff --git a/src/Orchard/Environment/ShellBuilders/SafeModeShellContainerFactory.cs b/src/Orchard/Environment/ShellBuilders/SafeModeShellContainerFactory.cs index cc79d536b..9159a5e10 100644 --- a/src/Orchard/Environment/ShellBuilders/SafeModeShellContainerFactory.cs +++ b/src/Orchard/Environment/ShellBuilders/SafeModeShellContainerFactory.cs @@ -28,14 +28,14 @@ using Orchard.UI.PageTitle; using Orchard.UI.Zones; namespace Orchard.Environment.ShellBuilders { - public class SafeModeShellContainerFactory : IShellContainerFactory { + public class SafeModeShellContainerFactory : IShellContainerFactory_Obsolete { private readonly IContainer _container; public SafeModeShellContainerFactory(IContainer container) { _container = container; } - public ILifetimeScope CreateContainer(IShellSettings settings) { + public ILifetimeScope CreateContainer(ShellSettings settings) { // when you have settings the setup container factory is not in effect if (settings != null) { return null; diff --git a/src/Orchard/Environment/Topology/ICompositionStrategy.cs b/src/Orchard/Environment/Topology/ICompositionStrategy.cs new file mode 100644 index 000000000..f6b1ff9c4 --- /dev/null +++ b/src/Orchard/Environment/Topology/ICompositionStrategy.cs @@ -0,0 +1,7 @@ +using Orchard.Environment.Topology.Models; + +namespace Orchard.Environment.Topology { + public interface ICompositionStrategy { + ShellTopology Compose(ShellTopologyDescriptor descriptor); + } +} diff --git a/src/Orchard/Environment/Topology/ITopologyDescriptorCache.cs b/src/Orchard/Environment/Topology/ITopologyDescriptorCache.cs new file mode 100644 index 000000000..376778122 --- /dev/null +++ b/src/Orchard/Environment/Topology/ITopologyDescriptorCache.cs @@ -0,0 +1,8 @@ +using Orchard.Environment.Topology.Models; + +namespace Orchard.Environment.Topology { + public interface ITopologyDescriptorCache { + ShellTopologyDescriptor Fetch(string name); + void Store(string name, ShellTopologyDescriptor descriptor); + } +} diff --git a/src/Orchard/Environment/Topology/ITopologyDescriptorProvider.cs b/src/Orchard/Environment/Topology/ITopologyDescriptorProvider.cs new file mode 100644 index 000000000..fec1724ce --- /dev/null +++ b/src/Orchard/Environment/Topology/ITopologyDescriptorProvider.cs @@ -0,0 +1,7 @@ +using Orchard.Environment.Topology.Models; + +namespace Orchard.Environment.Topology { + public interface ITopologyDescriptorProvider { + ShellTopologyDescriptor GetTopologyDescriptor(); + } +} diff --git a/src/Orchard/Environment/Topology/Models/ShellTopology.cs b/src/Orchard/Environment/Topology/Models/ShellTopology.cs new file mode 100644 index 000000000..5f7d4176a --- /dev/null +++ b/src/Orchard/Environment/Topology/Models/ShellTopology.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using Orchard.Extensions; + +namespace Orchard.Environment.Topology.Models { + public class ShellTopology { + public IEnumerable Modules { get; set; } + public IEnumerable Dependencies { get; set; } + public IEnumerable Controllers { get; set; } + public IEnumerable Records { get; set; } + } + + public class ShellTopologyItem { + public Type Type { get; set; } + public ExtensionDescriptor ExtensionDescriptor { get; set; } + public FeatureDescriptor FeatureDescriptor { get; set; } + public ExtensionEntry ExtensionEntry { get; set; } + } + + public class ModuleTopology : ShellTopologyItem { + } + + public class DependencyTopology : ShellTopologyItem { + public IEnumerable Parameters { get; set; } + } + + public class ControllerTopology : ShellTopologyItem { + public string AreaName { get; set; } + public string ControllerName { get; set; } + } + + public class RecordTopology : ShellTopologyItem { + public string TableName { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard/Environment/Topology/Models/ShellTopologyDescriptor.cs b/src/Orchard/Environment/Topology/Models/ShellTopologyDescriptor.cs new file mode 100644 index 000000000..02814be6f --- /dev/null +++ b/src/Orchard/Environment/Topology/Models/ShellTopologyDescriptor.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using Orchard.Environment.Configuration; + +namespace Orchard.Environment.Topology.Models { + public class ShellTopologyDescriptor { + public int SerialNumber { get; set; } + public ShellSettings Settings { get; set; } + public IEnumerable EnabledFeatures { get; set; } + public IEnumerable Parameters { get; set; } + } + + public class TopologyFeature { + public string ExtensionName { get; set; } + public string FeatureName { get; set; } + } + + public class TopologyParameter { + public string Component { get; set; } + public string Name { get; set; } + public string Value { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard/Extensions/ExtensionManager.cs b/src/Orchard/Extensions/ExtensionManager.cs index f9a031ec3..5f065c1b3 100644 --- a/src/Orchard/Extensions/ExtensionManager.cs +++ b/src/Orchard/Extensions/ExtensionManager.cs @@ -101,10 +101,10 @@ namespace Orchard.Extensions { return _activeExtensions; } - public ShellTopology GetExtensionsTopology() { + public ShellTopology_Obsolete GetExtensionsTopology() { var types = ActiveExtensions().SelectMany(x => x.ExportedTypes); types = types.Concat(typeof(IOrchardHost).Assembly.GetExportedTypes()); - return new ShellTopology { Types = types.Where(t => t.IsClass && !t.IsAbstract) }; + return new ShellTopology_Obsolete { Types = types.Where(t => t.IsClass && !t.IsAbstract) }; } public void InstallExtension(string extensionType, HttpPostedFileBase extensionBundle) { diff --git a/src/Orchard/Extensions/IExtensionManager.cs b/src/Orchard/Extensions/IExtensionManager.cs index 2d6c5a3ca..71f617fe0 100644 --- a/src/Orchard/Extensions/IExtensionManager.cs +++ b/src/Orchard/Extensions/IExtensionManager.cs @@ -5,7 +5,7 @@ namespace Orchard.Extensions { public interface IExtensionManager { IEnumerable AvailableExtensions(); IEnumerable ActiveExtensions(); - ShellTopology GetExtensionsTopology(); + ShellTopology_Obsolete GetExtensionsTopology(); void InstallExtension(string extensionType, HttpPostedFileBase extensionBundle); void UninstallExtension(string extensionType, string extensionName); } diff --git a/src/Orchard/Extensions/ShellTopology.cs b/src/Orchard/Extensions/ShellTopology.cs index eba9328db..e57548d8e 100644 --- a/src/Orchard/Extensions/ShellTopology.cs +++ b/src/Orchard/Extensions/ShellTopology.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; namespace Orchard.Extensions { - public class ShellTopology { + public class ShellTopology_Obsolete { public IEnumerable Types { get; set; } } } diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index ef1ac119c..53c921c4b 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -79,6 +79,7 @@ 3.5 + @@ -91,6 +92,7 @@ 3.5 + False ..\..\lib\yaml\Yaml.dll @@ -165,6 +167,11 @@ + + + + + @@ -400,6 +407,9 @@ + + +