From aa2d45c0b6e62f6d2302cf72a041a9ab0245351f Mon Sep 17 00:00:00 2001 From: Dave Reed Date: Tue, 22 Mar 2011 12:55:24 -0700 Subject: [PATCH] Squashed a bug with ResourceManager that sometimes resulted in missing resources. --HG-- branch : dev --- src/Orchard/UI/Resources/ResourceManager.cs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Orchard/UI/Resources/ResourceManager.cs b/src/Orchard/UI/Resources/ResourceManager.cs index c62faabef..634293830 100644 --- a/src/Orchard/UI/Resources/ResourceManager.cs +++ b/src/Orchard/UI/Resources/ResourceManager.cs @@ -11,7 +11,7 @@ using Autofac.Features.Metadata; using Orchard.Environment.Extensions.Models; namespace Orchard.UI.Resources { - public class ResourceManager : IResourceManager { + public class ResourceManager : IResourceManager, IUnitOfWorkDependency { private readonly Dictionary, RequireSettings> _required = new Dictionary, RequireSettings>(); private readonly List _links = new List(); private readonly Dictionary _metas = new Dictionary { @@ -234,11 +234,14 @@ namespace Orchard.UI.Resources { if (resource == null) { return; } - if (allResources.Contains(resource)) { - settings = ((RequireSettings) allResources[resource]).Combine(settings); - } - settings.Type = resource.Type; - settings.Name = resource.Name; + // Settings is given so they can cascade down into dependencies. For example, if Foo depends on Bar, and Foo's required + // location is Head, so too should Bar's location. + // forge the effective require settings for this resource + // (1) If a require exists for the resource, combine with it. Last settings in gets preference for its specified values. + // (2) If no require already exists, form a new settings object based on the given one but with its own type/name. + settings = allResources.Contains(resource) + ? ((RequireSettings)allResources[resource]).Combine(settings) + : new RequireSettings { Type = resource.Type, Name = resource.Name }.Combine(settings); if (resource.Dependencies != null) { var dependencies = from d in resource.Dependencies select FindResource(new RequireSettings { Type = resource.Type, Name = d });