Squashed a bug with ResourceManager that sometimes resulted in missing resources.

--HG--
branch : dev
This commit is contained in:
Dave Reed
2011-03-22 12:55:24 -07:00
parent e340097378
commit aa2d45c0b6
+9 -6
View File
@@ -11,7 +11,7 @@ using Autofac.Features.Metadata;
using Orchard.Environment.Extensions.Models; using Orchard.Environment.Extensions.Models;
namespace Orchard.UI.Resources { namespace Orchard.UI.Resources {
public class ResourceManager : IResourceManager { public class ResourceManager : IResourceManager, IUnitOfWorkDependency {
private readonly Dictionary<Tuple<String, String>, RequireSettings> _required = new Dictionary<Tuple<String, String>, RequireSettings>(); private readonly Dictionary<Tuple<String, String>, RequireSettings> _required = new Dictionary<Tuple<String, String>, RequireSettings>();
private readonly List<LinkEntry> _links = new List<LinkEntry>(); private readonly List<LinkEntry> _links = new List<LinkEntry>();
private readonly Dictionary<string, MetaEntry> _metas = new Dictionary<string, MetaEntry> { private readonly Dictionary<string, MetaEntry> _metas = new Dictionary<string, MetaEntry> {
@@ -234,11 +234,14 @@ namespace Orchard.UI.Resources {
if (resource == null) { if (resource == null) {
return; return;
} }
if (allResources.Contains(resource)) { // Settings is given so they can cascade down into dependencies. For example, if Foo depends on Bar, and Foo's required
settings = ((RequireSettings) allResources[resource]).Combine(settings); // location is Head, so too should Bar's location.
} // forge the effective require settings for this resource
settings.Type = resource.Type; // (1) If a require exists for the resource, combine with it. Last settings in gets preference for its specified values.
settings.Name = resource.Name; // (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) { if (resource.Dependencies != null) {
var dependencies = from d in resource.Dependencies var dependencies = from d in resource.Dependencies
select FindResource(new RequireSettings { Type = resource.Type, Name = d }); select FindResource(new RequireSettings { Type = resource.Type, Name = d });