diff --git a/src/Orchard.Core.Tests/Body/BodyPartTests.cs b/src/Orchard.Core.Tests/Body/BodyPartTests.cs index 4887f978c..6007265ea 100644 --- a/src/Orchard.Core.Tests/Body/BodyPartTests.cs +++ b/src/Orchard.Core.Tests/Body/BodyPartTests.cs @@ -5,6 +5,7 @@ using Autofac; using JetBrains.Annotations; using Moq; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; @@ -30,6 +31,7 @@ namespace Orchard.Core.Tests.Body { public override void Register(ContainerBuilder builder) { builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(new Mock().Object); builder.RegisterInstance(new Mock().Object); diff --git a/src/Orchard.Core.Tests/Scheduling/ScheduledTaskExecutorTests.cs b/src/Orchard.Core.Tests/Scheduling/ScheduledTaskExecutorTests.cs index 2eb56b3e6..887c08409 100644 --- a/src/Orchard.Core.Tests/Scheduling/ScheduledTaskExecutorTests.cs +++ b/src/Orchard.Core.Tests/Scheduling/ScheduledTaskExecutorTests.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using Autofac; using Moq; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement; using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.Records; @@ -36,6 +37,7 @@ namespace Orchard.Core.Tests.Scheduling { builder.RegisterInstance(new Mock().Object); builder.RegisterInstance(new Mock().Object); builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); diff --git a/src/Orchard.Core.Tests/Scheduling/ScheduledTaskManagerTests.cs b/src/Orchard.Core.Tests/Scheduling/ScheduledTaskManagerTests.cs index a6dea820c..a6422e375 100644 --- a/src/Orchard.Core.Tests/Scheduling/ScheduledTaskManagerTests.cs +++ b/src/Orchard.Core.Tests/Scheduling/ScheduledTaskManagerTests.cs @@ -4,6 +4,7 @@ using System.Linq; using Autofac; using Moq; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement; using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.Records; @@ -39,6 +40,7 @@ namespace Orchard.Core.Tests.Scheduling { public override void Register(ContainerBuilder builder) { builder.RegisterInstance(_mockServices.Object); builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); diff --git a/src/Orchard.Tests.Modules/Comments/Services/CommentServiceTests.cs b/src/Orchard.Tests.Modules/Comments/Services/CommentServiceTests.cs index 4e8694f4f..a1e0c3c05 100644 --- a/src/Orchard.Tests.Modules/Comments/Services/CommentServiceTests.cs +++ b/src/Orchard.Tests.Modules/Comments/Services/CommentServiceTests.cs @@ -4,6 +4,7 @@ using Autofac; using JetBrains.Annotations; using Moq; using NUnit.Framework; +using Orchard.Caching; using Orchard.Comments.Handlers; using Orchard.Comments.Models; using Orchard.Comments.Services; @@ -37,6 +38,7 @@ namespace Orchard.Tests.Modules.Comments.Services { public override void Register(ContainerBuilder builder) { builder.RegisterType().As(); builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(new Mock().Object); builder.RegisterInstance(new Mock().Object); diff --git a/src/Orchard.Tests.Modules/Indexing/IndexingTaskExecutorTests.cs b/src/Orchard.Tests.Modules/Indexing/IndexingTaskExecutorTests.cs index c5c996c78..d7196ae7f 100644 --- a/src/Orchard.Tests.Modules/Indexing/IndexingTaskExecutorTests.cs +++ b/src/Orchard.Tests.Modules/Indexing/IndexingTaskExecutorTests.cs @@ -5,6 +5,7 @@ using Autofac; using Lucene.Services; using Moq; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; @@ -65,6 +66,7 @@ namespace Orchard.Tests.Modules.Indexing { builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(_contentDefinitionManager.Object); builder.RegisterInstance(new Mock().Object); diff --git a/src/Orchard.Tests.Modules/Tags/Services/TagsServiceTests.cs b/src/Orchard.Tests.Modules/Tags/Services/TagsServiceTests.cs index dcc150a81..05e99dc04 100644 --- a/src/Orchard.Tests.Modules/Tags/Services/TagsServiceTests.cs +++ b/src/Orchard.Tests.Modules/Tags/Services/TagsServiceTests.cs @@ -5,6 +5,7 @@ using System.Linq; using Autofac; using Moq; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement; using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.Records; @@ -37,6 +38,7 @@ namespace Orchard.Tests.Modules.Tags.Services { builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)); } diff --git a/src/Orchard.Tests.Modules/Users/Services/MembershipServiceTests.cs b/src/Orchard.Tests.Modules/Users/Services/MembershipServiceTests.cs index e9af8e6f2..d2392ed20 100644 --- a/src/Orchard.Tests.Modules/Users/Services/MembershipServiceTests.cs +++ b/src/Orchard.Tests.Modules/Users/Services/MembershipServiceTests.cs @@ -5,6 +5,7 @@ using Autofac; using Moq; using NHibernate; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.MetaData.Services; @@ -72,6 +73,7 @@ namespace Orchard.Tests.Modules.Users.Services { builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType(typeof(SettingsFormatter)).As(); builder.RegisterType().As(); builder.RegisterType().As(); diff --git a/src/Orchard.Tests.Modules/Users/Services/UserServiceTests.cs b/src/Orchard.Tests.Modules/Users/Services/UserServiceTests.cs index 021ed3cb3..a22de7868 100644 --- a/src/Orchard.Tests.Modules/Users/Services/UserServiceTests.cs +++ b/src/Orchard.Tests.Modules/Users/Services/UserServiceTests.cs @@ -6,6 +6,7 @@ using Autofac; using Moq; using NHibernate; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.MetaData.Services; @@ -83,6 +84,7 @@ namespace Orchard.Tests.Modules.Users.Services { builder.RegisterInstance(_clock = new StubClock()).As(); builder.RegisterType().As(); builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType(typeof(SettingsFormatter)).As(); builder.RegisterType().As(); builder.RegisterType().As(); diff --git a/src/Orchard.Tests.Modules/Widgets/Services/WidgetsServiceTest.cs b/src/Orchard.Tests.Modules/Widgets/Services/WidgetsServiceTest.cs index e8b5ec7d9..04c94df17 100644 --- a/src/Orchard.Tests.Modules/Widgets/Services/WidgetsServiceTest.cs +++ b/src/Orchard.Tests.Modules/Widgets/Services/WidgetsServiceTest.cs @@ -4,6 +4,7 @@ using System.Linq; using Autofac; using Moq; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement; using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.MetaData; @@ -88,6 +89,7 @@ namespace Orchard.Tests.Modules.Widgets.Services { .Returns(new[] { theme1, theme2, theme3, module1 }); builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(new Mock().Object); builder.RegisterInstance(new Mock().Object); diff --git a/src/Orchard.Tests/ContentManagement/ContentQueryTests.cs b/src/Orchard.Tests/ContentManagement/ContentQueryTests.cs index c1d94ad5c..34fef1583 100644 --- a/src/Orchard.Tests/ContentManagement/ContentQueryTests.cs +++ b/src/Orchard.Tests/ContentManagement/ContentQueryTests.cs @@ -3,6 +3,7 @@ using Autofac; using Moq; using NHibernate; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement.MetaData; using Orchard.Data; using Orchard.ContentManagement; @@ -47,6 +48,7 @@ namespace Orchard.Tests.ContentManagement { builder.RegisterModule(new ContentModule()); builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(new Mock().Object); builder.RegisterInstance(new Mock().Object); diff --git a/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs b/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs index 74b341007..f7d9fe4d9 100644 --- a/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs +++ b/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs @@ -6,6 +6,7 @@ using Autofac; using Moq; using NHibernate; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData.Builders; using Orchard.ContentManagement.MetaData.Models; @@ -59,6 +60,7 @@ namespace Orchard.Tests.ContentManagement { var builder = new ContainerBuilder(); builder.RegisterType().As(); builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(_contentDefinitionManager.Object); builder.RegisterInstance(new Mock().Object); diff --git a/src/Orchard.Tests/ContentManagement/DynamicContentQueryTests.cs b/src/Orchard.Tests/ContentManagement/DynamicContentQueryTests.cs index da800b750..b042ff3d9 100644 --- a/src/Orchard.Tests/ContentManagement/DynamicContentQueryTests.cs +++ b/src/Orchard.Tests/ContentManagement/DynamicContentQueryTests.cs @@ -3,6 +3,7 @@ using Autofac; using Moq; using NHibernate; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement.MetaData; using Orchard.Data; using Orchard.ContentManagement; @@ -45,6 +46,7 @@ namespace Orchard.Tests.ContentManagement { builder.RegisterModule(new ContentModule()); builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(new Mock().Object); builder.RegisterInstance(new Mock().Object); diff --git a/src/Orchard.Tests/ContentManagement/HqlExpressionTests.cs b/src/Orchard.Tests/ContentManagement/HqlExpressionTests.cs index d985fae98..2341f2e2c 100644 --- a/src/Orchard.Tests/ContentManagement/HqlExpressionTests.cs +++ b/src/Orchard.Tests/ContentManagement/HqlExpressionTests.cs @@ -5,6 +5,7 @@ using Autofac; using Moq; using NHibernate; using NUnit.Framework; +using Orchard.Caching; using Orchard.ContentManagement.MetaData; using Orchard.Data; using Orchard.ContentManagement; @@ -48,6 +49,7 @@ namespace Orchard.Tests.ContentManagement { builder.RegisterModule(new ContentModule()); builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(new Mock().Object); builder.RegisterInstance(new Mock().Object); diff --git a/src/Orchard/Caching/Cache.cs b/src/Orchard/Caching/Cache.cs index 5836377db..431ee7293 100644 --- a/src/Orchard/Caching/Cache.cs +++ b/src/Orchard/Caching/Cache.cs @@ -30,7 +30,7 @@ namespace Orchard.Caching { } private CacheEntry UpdateEntry(CacheEntry currentEntry, TKey k, Func, TResult> acquire) { - var entry = (currentEntry.Tokens.Any(t => !t.IsCurrent)) ? CreateEntry(k, acquire) : currentEntry; + var entry = (currentEntry.Tokens.Any(t => t != null && !t.IsCurrent)) ? CreateEntry(k, acquire) : currentEntry; PropagateTokens(entry); return entry; } diff --git a/src/Orchard/ContentManagement/DefaultContentManager.cs b/src/Orchard/ContentManagement/DefaultContentManager.cs index 8928f921a..6d8e860f4 100644 --- a/src/Orchard/ContentManagement/DefaultContentManager.cs +++ b/src/Orchard/ContentManagement/DefaultContentManager.cs @@ -10,6 +10,7 @@ using NHibernate; using NHibernate.Criterion; using NHibernate.SqlCommand; using NHibernate.Transform; +using Orchard.Caching; using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData.Builders; @@ -27,6 +28,7 @@ namespace Orchard.ContentManagement { private readonly IRepository _contentItemRepository; private readonly IRepository _contentItemVersionRepository; private readonly IContentDefinitionManager _contentDefinitionManager; + private readonly ICacheManager _cacheManager; private readonly Func _contentManagerSession; private readonly Lazy _contentDisplay; private readonly Lazy _sessionLocator; @@ -40,6 +42,7 @@ namespace Orchard.ContentManagement { IRepository contentItemRepository, IRepository contentItemVersionRepository, IContentDefinitionManager contentDefinitionManager, + ICacheManager cacheManager, Func contentManagerSession, Lazy contentDisplay, Lazy sessionLocator, @@ -49,6 +52,7 @@ namespace Orchard.ContentManagement { _contentItemRepository = contentItemRepository; _contentItemVersionRepository = contentItemVersionRepository; _contentDefinitionManager = contentDefinitionManager; + _cacheManager = cacheManager; _contentManagerSession = contentManagerSession; _handlers = handlers; _contentDisplay = contentDisplay; @@ -661,13 +665,19 @@ namespace Orchard.ContentManagement { } private ContentTypeRecord AcquireContentTypeRecord(string contentType) { - var contentTypeRecord = _contentTypeRepository.Get(x => x.Name == contentType); - if (contentTypeRecord == null) { - //TEMP: this is not safe... ContentItem types could be created concurrently? - contentTypeRecord = new ContentTypeRecord { Name = contentType }; - _contentTypeRepository.Create(contentTypeRecord); - } - return contentTypeRecord; + var contentTypeId = _cacheManager.Get(contentType + "_Record", ctx => { + var contentTypeRecord = _contentTypeRepository.Get(x => x.Name == contentType); + + if (contentTypeRecord == null) { + //TEMP: this is not safe... ContentItem types could be created concurrently? + contentTypeRecord = new ContentTypeRecord { Name = contentType }; + _contentTypeRepository.Create(contentTypeRecord); + } + + return contentTypeRecord.Id; + }); + + return _contentTypeRepository.Get(contentTypeId); } public void Index(ContentItem contentItem, IDocumentIndex documentIndex) {