mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-12-02 19:44:02 +08:00
Must remember to save all before commit
--HG-- branch : dev
This commit is contained in:
@@ -86,7 +86,7 @@
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Roles\Controllers\AdminControllerTests.cs" />
|
||||
<Compile Include="Roles\Services\RoleServiceTests.cs" />
|
||||
<Compile Include="Settings\Topology\TopologyDescriptorManagerTests.cs" />
|
||||
<Compile Include="Settings\Topology\ShellDescriptorManagerTests.cs" />
|
||||
<Compile Include="Setup\SetupControllerTests.cs" />
|
||||
<Compile Include="Values.cs" />
|
||||
<Compile Include="Users\Controllers\AdminControllerTests.cs" />
|
||||
|
||||
@@ -68,8 +68,8 @@ namespace Orchard.Tests.Environment {
|
||||
_container.Mock<IContainerProvider>()
|
||||
.Setup(cp => cp.EndRequestLifetime()).Callback(() => _lifetime.Dispose());
|
||||
|
||||
_container.Mock<ITopologyDescriptorManager>()
|
||||
.Setup(cp => cp.GetTopologyDescriptor()).Returns(new ShellTopologyDescriptor());
|
||||
_container.Mock<IShellDescriptorManager>()
|
||||
.Setup(cp => cp.GetShellDescriptor()).Returns(new ShellDescriptor());
|
||||
|
||||
var temp = Path.GetTempFileName();
|
||||
File.Delete(temp);
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace Orchard.Tests.Environment.ShellBuilders {
|
||||
}
|
||||
|
||||
DependencyTopology WithDependency<T>() {
|
||||
return new DependencyTopology { Type = typeof(T), Parameters = Enumerable.Empty<TopologyParameter>() };
|
||||
return new DependencyTopology { Type = typeof(T), Parameters = Enumerable.Empty<ShellParameter>() };
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -192,9 +192,9 @@ namespace Orchard.Tests.Environment.ShellBuilders {
|
||||
|
||||
topology.Dependencies.Single().Parameters =
|
||||
new[] {
|
||||
new TopologyParameter {Name = "alpha", Value = "-a-"},
|
||||
new TopologyParameter {Name = "Beta", Value = "-b-"},
|
||||
new TopologyParameter {Name = "Gamma", Value = "-g-"},
|
||||
new ShellParameter {Name = "alpha", Value = "-a-"},
|
||||
new ShellParameter {Name = "Beta", Value = "-b-"},
|
||||
new ShellParameter {Name = "Gamma", Value = "-g-"},
|
||||
};
|
||||
|
||||
var factory = _container.Resolve<IShellContainerFactory>();
|
||||
|
||||
@@ -25,11 +25,11 @@ namespace Orchard.Tests.Environment.ShellBuilders {
|
||||
[Test]
|
||||
public void NormalExecutionReturnsExpectedObjects() {
|
||||
var settings = new ShellSettings { Name = "Default" };
|
||||
var topologyDescriptor = new ShellTopologyDescriptor { SerialNumber = 6655321 };
|
||||
var topologyDescriptor = new ShellDescriptor { SerialNumber = 6655321 };
|
||||
var topology = new ShellTopology();
|
||||
var shellLifetimeScope = _container.BeginLifetimeScope("shell");
|
||||
|
||||
_container.Mock<ITopologyDescriptorCache>()
|
||||
_container.Mock<IShellDescriptorCache>()
|
||||
.Setup(x => x.Fetch("Default"))
|
||||
.Returns(topologyDescriptor);
|
||||
|
||||
@@ -41,8 +41,8 @@ namespace Orchard.Tests.Environment.ShellBuilders {
|
||||
.Setup(x => x.CreateContainer(settings, topology))
|
||||
.Returns(shellLifetimeScope );
|
||||
|
||||
_container.Mock<ITopologyDescriptorManager>()
|
||||
.Setup(x => x.GetTopologyDescriptor())
|
||||
_container.Mock<IShellDescriptorManager>()
|
||||
.Setup(x => x.GetShellDescriptor())
|
||||
.Returns(topologyDescriptor);
|
||||
|
||||
var factory = _container.Resolve<IShellContextFactory>();
|
||||
@@ -50,7 +50,7 @@ namespace Orchard.Tests.Environment.ShellBuilders {
|
||||
var context = factory.Create(settings);
|
||||
|
||||
Assert.That(context.Settings, Is.SameAs(settings));
|
||||
Assert.That(context.TopologyDescriptor, Is.SameAs(topologyDescriptor));
|
||||
Assert.That(context.Descriptor, Is.SameAs(topologyDescriptor));
|
||||
Assert.That(context.Topology, Is.SameAs(topology));
|
||||
Assert.That(context.LifetimeScope, Is.SameAs(shellLifetimeScope));
|
||||
Assert.That(context.Shell, Is.SameAs(shellLifetimeScope.Resolve<IOrchardShell>()));
|
||||
@@ -61,7 +61,7 @@ namespace Orchard.Tests.Environment.ShellBuilders {
|
||||
var topology = new ShellTopology();
|
||||
|
||||
_container.Mock<ICompositionStrategy>()
|
||||
.Setup(x => x.Compose(It.IsAny<ShellTopologyDescriptor>()))
|
||||
.Setup(x => x.Compose(It.IsAny<ShellDescriptor>()))
|
||||
.Returns(topology);
|
||||
|
||||
_container.Mock<IShellContainerFactory>()
|
||||
@@ -71,7 +71,7 @@ namespace Orchard.Tests.Environment.ShellBuilders {
|
||||
var factory = _container.Resolve<IShellContextFactory>();
|
||||
var context = factory.Create(null);
|
||||
|
||||
Assert.That(context.TopologyDescriptor.EnabledFeatures, Has.Some.With.Property("Name").EqualTo("Orchard.Setup"));
|
||||
Assert.That(context.Descriptor.EnabledFeatures, Has.Some.With.Property("Name").EqualTo("Orchard.Setup"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,24 +5,24 @@ using Orchard.Environment.Topology.Models;
|
||||
namespace Orchard.Tests.Environment.Utility {
|
||||
static class Build {
|
||||
|
||||
public static ShellTopologyDescriptor TopologyDescriptor() {
|
||||
var descriptor = new ShellTopologyDescriptor {
|
||||
EnabledFeatures = Enumerable.Empty<TopologyFeature>(),
|
||||
Parameters = Enumerable.Empty<TopologyParameter>(),
|
||||
public static ShellDescriptor TopologyDescriptor() {
|
||||
var descriptor = new ShellDescriptor {
|
||||
EnabledFeatures = Enumerable.Empty<ShellFeature>(),
|
||||
Parameters = Enumerable.Empty<ShellParameter>(),
|
||||
};
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
public static ShellTopologyDescriptor WithFeatures(this ShellTopologyDescriptor descriptor, params string[] names) {
|
||||
public static ShellDescriptor WithFeatures(this ShellDescriptor descriptor, params string[] names) {
|
||||
descriptor.EnabledFeatures = descriptor.EnabledFeatures.Concat(
|
||||
names.Select(name => new TopologyFeature { Name = name }));
|
||||
names.Select(name => new ShellFeature { Name = name }));
|
||||
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
public static ShellTopologyDescriptor WithParameter<TComponent>(this ShellTopologyDescriptor descriptor, string name, string value) {
|
||||
public static ShellDescriptor WithParameter<TComponent>(this ShellDescriptor descriptor, string name, string value) {
|
||||
descriptor.Parameters = descriptor.Parameters.Concat(
|
||||
new[] { new TopologyParameter { Component = typeof(TComponent).FullName, Name = name, Value = value } });
|
||||
new[] { new ShellParameter { Component = typeof(TComponent).FullName, Name = name, Value = value } });
|
||||
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
<Compile Include="Environment\ShellBuilders\DefaultShellContextFactoryTests.cs" />
|
||||
<Compile Include="Utility\ContainerExtensions.cs" />
|
||||
<Compile Include="Environment\TestDependencies\TestDependency.cs" />
|
||||
<Compile Include="Environment\Topology\DefaultTopologyDescriptorCacheTests.cs" />
|
||||
<Compile Include="Environment\Topology\DefaultShellDescriptorCacheTests.cs" />
|
||||
<Compile Include="EventsTests.cs" />
|
||||
<Compile Include="Events\EventTests.cs" />
|
||||
<Compile Include="Environment\Extensions\ExtensionFoldersTests.cs" />
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
<Compile Include="Settings\Topology\Records\TopologyFeatureRecord.cs" />
|
||||
<Compile Include="Settings\Topology\Records\TopologyParameterRecord.cs" />
|
||||
<Compile Include="Settings\Topology\Records\TopologyRecord.cs" />
|
||||
<Compile Include="Settings\Topology\TopologyDescriptorManager.cs" />
|
||||
<Compile Include="Settings\Topology\ShellDescriptorManager.cs" />
|
||||
<Compile Include="Themes\DesignerNotes\ZoneManagerEvents.cs" />
|
||||
<Compile Include="Themes\Preview\IPreviewTheme.cs" />
|
||||
<Compile Include="Themes\Preview\PreviewThemeFilter.cs" />
|
||||
|
||||
@@ -9,11 +9,11 @@ using Orchard.Events;
|
||||
using Orchard.Localization;
|
||||
|
||||
namespace Orchard.Core.Settings.Topology {
|
||||
public class TopologyDescriptorManager : ITopologyDescriptorManager {
|
||||
public class ShellDescriptorManager : IShellDescriptorManager {
|
||||
private readonly IRepository<TopologyRecord> _topologyRecordRepository;
|
||||
private readonly IEventBus _eventBus;
|
||||
|
||||
public TopologyDescriptorManager(
|
||||
public ShellDescriptorManager(
|
||||
IRepository<TopologyRecord> repository,
|
||||
IEventBus eventBus) {
|
||||
_topologyRecordRepository = repository;
|
||||
@@ -23,23 +23,23 @@ namespace Orchard.Core.Settings.Topology {
|
||||
|
||||
Localizer T { get; set; }
|
||||
|
||||
public ShellTopologyDescriptor GetTopologyDescriptor() {
|
||||
public ShellDescriptor GetShellDescriptor() {
|
||||
TopologyRecord topologyRecord = GetTopologyRecord();
|
||||
if (topologyRecord == null) return null;
|
||||
return GetShellTopologyDescriptorFromRecord(topologyRecord);
|
||||
}
|
||||
|
||||
private static ShellTopologyDescriptor GetShellTopologyDescriptorFromRecord(TopologyRecord topologyRecord) {
|
||||
ShellTopologyDescriptor descriptor = new ShellTopologyDescriptor { SerialNumber = topologyRecord.SerialNumber };
|
||||
var descriptorFeatures = new List<TopologyFeature>();
|
||||
private static ShellDescriptor GetShellTopologyDescriptorFromRecord(TopologyRecord topologyRecord) {
|
||||
ShellDescriptor descriptor = new ShellDescriptor { SerialNumber = topologyRecord.SerialNumber };
|
||||
var descriptorFeatures = new List<ShellFeature>();
|
||||
foreach (var topologyFeatureRecord in topologyRecord.EnabledFeatures) {
|
||||
descriptorFeatures.Add(new TopologyFeature { Name = topologyFeatureRecord.Name });
|
||||
descriptorFeatures.Add(new ShellFeature { Name = topologyFeatureRecord.Name });
|
||||
}
|
||||
descriptor.EnabledFeatures = descriptorFeatures;
|
||||
var descriptorParameters = new List<TopologyParameter>();
|
||||
var descriptorParameters = new List<ShellParameter>();
|
||||
foreach (var topologyParameterRecord in topologyRecord.Parameters) {
|
||||
descriptorParameters.Add(
|
||||
new TopologyParameter {
|
||||
new ShellParameter {
|
||||
Component = topologyParameterRecord.Component,
|
||||
Name = topologyParameterRecord.Name,
|
||||
Value = topologyParameterRecord.Value
|
||||
@@ -55,7 +55,7 @@ namespace Orchard.Core.Settings.Topology {
|
||||
return records.FirstOrDefault();
|
||||
}
|
||||
|
||||
public void UpdateTopologyDescriptor(int priorSerialNumber, IEnumerable<TopologyFeature> enabledFeatures, IEnumerable<TopologyParameter> parameters) {
|
||||
public void UpdateShellDescriptor(int priorSerialNumber, IEnumerable<ShellFeature> enabledFeatures, IEnumerable<ShellParameter> parameters) {
|
||||
TopologyRecord topologyRecord = GetTopologyRecord();
|
||||
var serialNumber = topologyRecord == null ? 0 : topologyRecord.SerialNumber;
|
||||
if (priorSerialNumber != serialNumber)
|
||||
@@ -91,7 +91,7 @@ namespace Orchard.Core.Settings.Topology {
|
||||
topologyRecord.Parameters = descriptorParameterRecords;
|
||||
|
||||
_eventBus.Notify(
|
||||
typeof(ITopologyDescriptorManager).FullName + ".UpdateTopologyDescriptor",
|
||||
typeof(IShellDescriptorManager).FullName + ".UpdateShellDescriptor",
|
||||
null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using Orchard.Extensions.Models;
|
||||
|
||||
namespace Orchard.Extensions {
|
||||
public class ExtensionDescriptor {
|
||||
/// <summary>
|
||||
/// Virtual path base, "~/Themes", "~/Modules", or "~/Core"
|
||||
/// </summary>
|
||||
public string Location { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Folder name under virtual path base
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// "Theme" or "Module"
|
||||
/// </summary>
|
||||
public string ExtensionType { get; set; }
|
||||
|
||||
// extension metadata
|
||||
public string DisplayName { get; set; }
|
||||
public string Description { get; set; }
|
||||
public string Version { get; set; }
|
||||
public string OrchardVersion { get; set; }
|
||||
public string Author { get; set; }
|
||||
public string WebSite { get; set; }
|
||||
public string Tags { get; set; }
|
||||
public string AntiForgery { get; set; }
|
||||
|
||||
public IEnumerable<FeatureDescriptor> Features { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -33,7 +33,7 @@ namespace Orchard.Environment {
|
||||
|
||||
builder.RegisterType<ShellContextFactory>().As<IShellContextFactory>().SingleInstance();
|
||||
{
|
||||
builder.RegisterType<TopologyDescriptorCache>().As<ITopologyDescriptorCache>().SingleInstance();
|
||||
builder.RegisterType<ShellDescriptorCache>().As<IShellDescriptorCache>().SingleInstance();
|
||||
|
||||
builder.RegisterType<CompositionStrategy>()
|
||||
.As<ICompositionStrategy>()
|
||||
|
||||
@@ -5,7 +5,7 @@ using Orchard.Environment.Topology.Models;
|
||||
namespace Orchard.Environment.ShellBuilders {
|
||||
public class ShellContext {
|
||||
public ShellSettings Settings { get; set; }
|
||||
public ShellTopologyDescriptor TopologyDescriptor { get; set; }
|
||||
public ShellDescriptor Descriptor { get; set; }
|
||||
public ShellTopology Topology { get; set; }
|
||||
public ILifetimeScope LifetimeScope { get; set; }
|
||||
public IOrchardShell Shell { get; set; }
|
||||
|
||||
@@ -12,15 +12,15 @@ namespace Orchard.Environment.ShellBuilders {
|
||||
}
|
||||
|
||||
public class ShellContextFactory : IShellContextFactory {
|
||||
private readonly ITopologyDescriptorCache _topologyDescriptorCache;
|
||||
private readonly IShellDescriptorCache _shellDescriptorCache;
|
||||
private readonly ICompositionStrategy _compositionStrategy;
|
||||
private readonly IShellContainerFactory _shellContainerFactory;
|
||||
|
||||
public ShellContextFactory(
|
||||
ITopologyDescriptorCache topologyDescriptorCache,
|
||||
IShellDescriptorCache shellDescriptorCache,
|
||||
ICompositionStrategy compositionStrategy,
|
||||
IShellContainerFactory shellContainerFactory) {
|
||||
_topologyDescriptorCache = topologyDescriptorCache;
|
||||
_shellDescriptorCache = shellDescriptorCache;
|
||||
_compositionStrategy = compositionStrategy;
|
||||
_shellContainerFactory = shellContainerFactory;
|
||||
Logger = NullLogger.Instance;
|
||||
@@ -35,7 +35,7 @@ namespace Orchard.Environment.ShellBuilders {
|
||||
|
||||
Logger.Debug("Creating shell context for tenant {0}", settings.Name);
|
||||
|
||||
var knownDescriptor = _topologyDescriptorCache.Fetch(settings.Name);
|
||||
var knownDescriptor = _shellDescriptorCache.Fetch(settings.Name);
|
||||
if (knownDescriptor == null) {
|
||||
Logger.Information("No topology cached. Starting with minimum components.");
|
||||
knownDescriptor = MinimumTopologyDescriptor();
|
||||
@@ -44,37 +44,37 @@ namespace Orchard.Environment.ShellBuilders {
|
||||
var topology = _compositionStrategy.Compose(knownDescriptor);
|
||||
var shellScope = _shellContainerFactory.CreateContainer(settings, topology);
|
||||
|
||||
ShellTopologyDescriptor currentDescriptor;
|
||||
ShellDescriptor currentDescriptor;
|
||||
using (var standaloneEnvironment = new StandaloneEnvironment(shellScope)) {
|
||||
var topologyDescriptorProvider = standaloneEnvironment.Resolve<ITopologyDescriptorManager>();
|
||||
currentDescriptor = topologyDescriptorProvider.GetTopologyDescriptor();
|
||||
var topologyDescriptorProvider = standaloneEnvironment.Resolve<IShellDescriptorManager>();
|
||||
currentDescriptor = topologyDescriptorProvider.GetShellDescriptor();
|
||||
}
|
||||
|
||||
if (currentDescriptor != null && knownDescriptor.SerialNumber != currentDescriptor.SerialNumber) {
|
||||
Logger.Information("Newer topology obtained. Rebuilding shell container.");
|
||||
|
||||
_topologyDescriptorCache.Store(settings.Name, currentDescriptor);
|
||||
_shellDescriptorCache.Store(settings.Name, currentDescriptor);
|
||||
topology = _compositionStrategy.Compose(currentDescriptor);
|
||||
shellScope = _shellContainerFactory.CreateContainer(settings, topology);
|
||||
}
|
||||
|
||||
return new ShellContext {
|
||||
Settings = settings,
|
||||
TopologyDescriptor = currentDescriptor,
|
||||
Descriptor = currentDescriptor,
|
||||
Topology = topology,
|
||||
LifetimeScope = shellScope,
|
||||
Shell = shellScope.Resolve<IOrchardShell>(),
|
||||
};
|
||||
}
|
||||
|
||||
private static ShellTopologyDescriptor MinimumTopologyDescriptor() {
|
||||
return new ShellTopologyDescriptor {
|
||||
private static ShellDescriptor MinimumTopologyDescriptor() {
|
||||
return new ShellDescriptor {
|
||||
SerialNumber = -1,
|
||||
EnabledFeatures = new[] {
|
||||
new TopologyFeature {Name = "Orchard.Framework"},
|
||||
new TopologyFeature {Name = "Settings"},
|
||||
new ShellFeature {Name = "Orchard.Framework"},
|
||||
new ShellFeature {Name = "Settings"},
|
||||
},
|
||||
Parameters = Enumerable.Empty<TopologyParameter>(),
|
||||
Parameters = Enumerable.Empty<ShellParameter>(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -82,9 +82,9 @@ namespace Orchard.Environment.ShellBuilders {
|
||||
Logger.Warning("No shell settings available. Creating shell context for setup");
|
||||
|
||||
var settings = new ShellSettings { Name = "__Orchard__Setup__" };
|
||||
var descriptor = new ShellTopologyDescriptor {
|
||||
var descriptor = new ShellDescriptor {
|
||||
SerialNumber = -1,
|
||||
EnabledFeatures = new[] { new TopologyFeature { Name = "Orchard.Setup" } },
|
||||
EnabledFeatures = new[] { new ShellFeature { Name = "Orchard.Setup" } },
|
||||
};
|
||||
|
||||
var topology = _compositionStrategy.Compose(descriptor);
|
||||
@@ -92,7 +92,7 @@ namespace Orchard.Environment.ShellBuilders {
|
||||
|
||||
return new ShellContext {
|
||||
Settings = settings,
|
||||
TopologyDescriptor = descriptor,
|
||||
Descriptor = descriptor,
|
||||
Topology = topology,
|
||||
LifetimeScope = shellScope,
|
||||
Shell = shellScope.Resolve<IOrchardShell>(),
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace Orchard.Environment.Topology {
|
||||
/// Using information from the IExtensionManager, transforms and populates all of the
|
||||
/// topology model the shell builders will need to correctly initialize a tenant IoC container.
|
||||
/// </summary>
|
||||
ShellTopology Compose(ShellTopologyDescriptor descriptor);
|
||||
ShellTopology Compose(ShellDescriptor descriptor);
|
||||
}
|
||||
|
||||
public class CompositionStrategy : ICompositionStrategy {
|
||||
@@ -29,26 +29,26 @@ namespace Orchard.Environment.Topology {
|
||||
_extensionManager = extensionManager;
|
||||
}
|
||||
|
||||
public ShellTopology Compose(ShellTopologyDescriptor topologyDescriptor) {
|
||||
public ShellTopology Compose(ShellDescriptor descriptor) {
|
||||
var enabledFeatures = _extensionManager.AvailableExtensions()
|
||||
.SelectMany(extensionDescriptor => extensionDescriptor.Features)
|
||||
.Where(featureDescriptor => IsFeatureEnabledInTopology(featureDescriptor, topologyDescriptor));
|
||||
.Where(featureDescriptor => IsFeatureEnabledInTopology(featureDescriptor, descriptor));
|
||||
|
||||
var features = _extensionManager.LoadFeatures(enabledFeatures);
|
||||
|
||||
if (topologyDescriptor.EnabledFeatures.Any(feature => feature.Name == "Orchard.Framework"))
|
||||
if (descriptor.EnabledFeatures.Any(feature => feature.Name == "Orchard.Framework"))
|
||||
features = features.Concat(BuiltinFeatures());
|
||||
|
||||
return new ShellTopology {
|
||||
Modules = BuildTopology<ModuleTopology>(features, IsModule, BuildModule),
|
||||
Dependencies = BuildTopology(features, IsDependency, (t, f) => BuildDependency(t, f, topologyDescriptor)),
|
||||
Dependencies = BuildTopology(features, IsDependency, (t, f) => BuildDependency(t, f, descriptor)),
|
||||
Controllers = BuildTopology<ControllerTopology>(features, IsController, BuildController),
|
||||
Records = BuildTopology<RecordTopology>(features, IsRecord, BuildRecord),
|
||||
};
|
||||
}
|
||||
|
||||
private static bool IsFeatureEnabledInTopology(FeatureDescriptor featureDescriptor, ShellTopologyDescriptor topologyDescriptor) {
|
||||
return topologyDescriptor.EnabledFeatures.Any(topologyFeature => topologyFeature.Name == featureDescriptor.Name);
|
||||
private static bool IsFeatureEnabledInTopology(FeatureDescriptor featureDescriptor, ShellDescriptor descriptor) {
|
||||
return descriptor.EnabledFeatures.Any(topologyFeature => topologyFeature.Name == featureDescriptor.Name);
|
||||
}
|
||||
|
||||
private static IEnumerable<Feature> BuiltinFeatures() {
|
||||
@@ -89,11 +89,11 @@ namespace Orchard.Environment.Topology {
|
||||
return typeof(IDependency).IsAssignableFrom(type);
|
||||
}
|
||||
|
||||
private static DependencyTopology BuildDependency(Type type, Feature feature, ShellTopologyDescriptor topologyDescriptor) {
|
||||
private static DependencyTopology BuildDependency(Type type, Feature feature, ShellDescriptor descriptor) {
|
||||
return new DependencyTopology {
|
||||
Type = type,
|
||||
Feature = feature,
|
||||
Parameters = topologyDescriptor.Parameters.Where(x => x.Component == type.FullName).ToArray()
|
||||
Parameters = descriptor.Parameters.Where(x => x.Component == type.FullName).ToArray()
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace Orchard.Environment.Topology.Models {
|
||||
}
|
||||
|
||||
public class DependencyTopology : ShellTopologyItem {
|
||||
public IEnumerable<TopologyParameter> Parameters { get; set; }
|
||||
public IEnumerable<ShellParameter> Parameters { get; set; }
|
||||
}
|
||||
|
||||
public class ControllerTopology : ShellTopologyItem {
|
||||
|
||||
@@ -13,26 +13,26 @@ namespace Orchard.Environment.Topology {
|
||||
/// and recall of topology descriptor information. Default implementation uses
|
||||
/// app_data, but configured replacements could use other per-host writable location.
|
||||
/// </summary>
|
||||
public interface ITopologyDescriptorCache {
|
||||
public interface IShellDescriptorCache {
|
||||
/// <summary>
|
||||
/// Recreate the named configuration information. Used at startup.
|
||||
/// Returns null on cache-miss.
|
||||
/// </summary>
|
||||
ShellTopologyDescriptor Fetch(string name);
|
||||
ShellDescriptor Fetch(string name);
|
||||
|
||||
/// <summary>
|
||||
/// Commit named configuration to reasonable persistent storage.
|
||||
/// This storage is scoped to the current-server and current-webapp.
|
||||
/// Loss of storage is expected.
|
||||
/// </summary>
|
||||
void Store(string name, ShellTopologyDescriptor descriptor);
|
||||
void Store(string name, ShellDescriptor descriptor);
|
||||
}
|
||||
|
||||
public class TopologyDescriptorCache : ITopologyDescriptorCache {
|
||||
public class ShellDescriptorCache : IShellDescriptorCache {
|
||||
private readonly IAppDataFolder _appDataFolder;
|
||||
private const string TopologyCacheFileName = "cache.dat";
|
||||
|
||||
public TopologyDescriptorCache(IAppDataFolder appDataFolder) {
|
||||
public ShellDescriptorCache(IAppDataFolder appDataFolder) {
|
||||
_appDataFolder = appDataFolder;
|
||||
T = NullLocalizer.Instance;
|
||||
Logger = NullLogger.Instance;
|
||||
@@ -42,9 +42,9 @@ namespace Orchard.Environment.Topology {
|
||||
public ILogger Logger { get; set; }
|
||||
private Localizer T { get; set; }
|
||||
|
||||
#region Implementation of ITopologyDescriptorCache
|
||||
#region Implementation of IShellDescriptorCache
|
||||
|
||||
public ShellTopologyDescriptor Fetch(string name) {
|
||||
public ShellDescriptor Fetch(string name) {
|
||||
VerifyCacheFile();
|
||||
var text = _appDataFolder.ReadFile(TopologyCacheFileName);
|
||||
XmlDocument xmlDocument = new XmlDocument();
|
||||
@@ -52,10 +52,10 @@ namespace Orchard.Environment.Topology {
|
||||
XmlNode rootNode = xmlDocument.DocumentElement;
|
||||
foreach (XmlNode tenantNode in rootNode.ChildNodes) {
|
||||
if (String.Equals(tenantNode.Name, name, StringComparison.OrdinalIgnoreCase)) {
|
||||
var serializer = new DataContractSerializer(typeof(ShellTopologyDescriptor));
|
||||
var serializer = new DataContractSerializer(typeof(ShellDescriptor));
|
||||
var reader = new StringReader(tenantNode.InnerText);
|
||||
using (var xmlReader = XmlReader.Create(reader)) {
|
||||
return (ShellTopologyDescriptor) serializer.ReadObject(xmlReader, true);
|
||||
return (ShellDescriptor) serializer.ReadObject(xmlReader, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -63,7 +63,7 @@ namespace Orchard.Environment.Topology {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void Store(string name, ShellTopologyDescriptor descriptor) {
|
||||
public void Store(string name, ShellDescriptor descriptor) {
|
||||
VerifyCacheFile();
|
||||
var text = _appDataFolder.ReadFile(TopologyCacheFileName);
|
||||
bool tenantCacheUpdated = false;
|
||||
@@ -73,7 +73,7 @@ namespace Orchard.Environment.Topology {
|
||||
XmlNode rootNode = xmlDocument.DocumentElement;
|
||||
foreach (XmlNode tenantNode in rootNode.ChildNodes) {
|
||||
if (String.Equals(tenantNode.Name, name, StringComparison.OrdinalIgnoreCase)) {
|
||||
var serializer = new DataContractSerializer(typeof (ShellTopologyDescriptor));
|
||||
var serializer = new DataContractSerializer(typeof (ShellDescriptor));
|
||||
var writer = new StringWriter();
|
||||
using (var xmlWriter = XmlWriter.Create(writer)) {
|
||||
serializer.WriteObject(xmlWriter, descriptor);
|
||||
@@ -85,7 +85,7 @@ namespace Orchard.Environment.Topology {
|
||||
}
|
||||
if (!tenantCacheUpdated) {
|
||||
XmlElement newTenant = xmlDocument.CreateElement(name);
|
||||
var serializer = new DataContractSerializer(typeof(ShellTopologyDescriptor));
|
||||
var serializer = new DataContractSerializer(typeof(ShellDescriptor));
|
||||
var writer = new StringWriter();
|
||||
using (var xmlWriter = XmlWriter.Create(writer)) {
|
||||
serializer.WriteObject(xmlWriter, descriptor);
|
||||
|
||||
@@ -169,10 +169,10 @@
|
||||
<Compile Include="Environment\AutofacUtil\ContainerUpdater.cs" />
|
||||
<Compile Include="Environment\ShellBuilders\ShellContextFactory.cs" />
|
||||
<Compile Include="Environment\ShellBuilders\ShellContext.cs" />
|
||||
<Compile Include="Environment\Topology\TopologyDescriptorCache.cs" />
|
||||
<Compile Include="Environment\Topology\ITopologyDescriptorManager.cs" />
|
||||
<Compile Include="Environment\Topology\ShellDescriptorCache.cs" />
|
||||
<Compile Include="Environment\Topology\IShellDescriptorManager.cs" />
|
||||
<Compile Include="Environment\Topology\Models\ShellTopology.cs" />
|
||||
<Compile Include="Environment\Topology\Models\ShellTopologyDescriptor.cs" />
|
||||
<Compile Include="Environment\Topology\Models\ShellDescriptor.cs" />
|
||||
<Compile Include="Environment\ShellBuilders\ShellContainerFactory.cs" />
|
||||
<Compile Include="Environment\Configuration\ShellSettings.cs" />
|
||||
<Compile Include="Environment\StandaloneEnvironment.cs" />
|
||||
|
||||
Reference in New Issue
Block a user