Must remember to save all before commit

--HG--
branch : dev
This commit is contained in:
Louis DeJardin
2010-04-19 14:25:16 -07:00
parent 8d78fee02b
commit 9495f5c557
16 changed files with 79 additions and 112 deletions

View File

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

View File

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

View File

@@ -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>();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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>(),

View File

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

View File

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

View File

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

View File

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