diff --git a/src/Orchard.Core.Tests/Body/BodyPartTests.cs b/src/Orchard.Core.Tests/Body/BodyPartTests.cs index 6007265ea..a04c75be8 100644 --- a/src/Orchard.Core.Tests/Body/BodyPartTests.cs +++ b/src/Orchard.Core.Tests/Body/BodyPartTests.cs @@ -32,6 +32,7 @@ namespace Orchard.Core.Tests.Body { 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.Core.Tests/Common/Providers/CommonPartProviderTests.cs b/src/Orchard.Core.Tests/Common/Providers/CommonPartProviderTests.cs index 5b8028c3a..75d6b0f6c 100644 --- a/src/Orchard.Core.Tests/Common/Providers/CommonPartProviderTests.cs +++ b/src/Orchard.Core.Tests/Common/Providers/CommonPartProviderTests.cs @@ -51,6 +51,7 @@ namespace Orchard.Core.Tests.Common.Providers { public override void Register(ContainerBuilder builder) { builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); diff --git a/src/Orchard.Core.Tests/Scheduling/ScheduledTaskExecutorTests.cs b/src/Orchard.Core.Tests/Scheduling/ScheduledTaskExecutorTests.cs index 887c08409..00a7566a8 100644 --- a/src/Orchard.Core.Tests/Scheduling/ScheduledTaskExecutorTests.cs +++ b/src/Orchard.Core.Tests/Scheduling/ScheduledTaskExecutorTests.cs @@ -38,6 +38,7 @@ namespace Orchard.Core.Tests.Scheduling { builder.RegisterInstance(new Mock().Object); builder.RegisterType().As(); 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 a6422e375..10daf173c 100644 --- a/src/Orchard.Core.Tests/Scheduling/ScheduledTaskManagerTests.cs +++ b/src/Orchard.Core.Tests/Scheduling/ScheduledTaskManagerTests.cs @@ -40,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 a1e0c3c05..491edf9ae 100644 --- a/src/Orchard.Tests.Modules/Comments/Services/CommentServiceTests.cs +++ b/src/Orchard.Tests.Modules/Comments/Services/CommentServiceTests.cs @@ -39,6 +39,7 @@ namespace Orchard.Tests.Modules.Comments.Services { builder.RegisterType().As(); 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 d7196ae7f..48690f1c0 100644 --- a/src/Orchard.Tests.Modules/Indexing/IndexingTaskExecutorTests.cs +++ b/src/Orchard.Tests.Modules/Indexing/IndexingTaskExecutorTests.cs @@ -67,6 +67,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 05e99dc04..d7ca25c5c 100644 --- a/src/Orchard.Tests.Modules/Tags/Services/TagsServiceTests.cs +++ b/src/Orchard.Tests.Modules/Tags/Services/TagsServiceTests.cs @@ -39,6 +39,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 d2392ed20..96dc3062e 100644 --- a/src/Orchard.Tests.Modules/Users/Services/MembershipServiceTests.cs +++ b/src/Orchard.Tests.Modules/Users/Services/MembershipServiceTests.cs @@ -74,6 +74,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 a22de7868..4192d6bad 100644 --- a/src/Orchard.Tests.Modules/Users/Services/UserServiceTests.cs +++ b/src/Orchard.Tests.Modules/Users/Services/UserServiceTests.cs @@ -85,6 +85,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/Widgets/Services/WidgetsServiceTest.cs b/src/Orchard.Tests.Modules/Widgets/Services/WidgetsServiceTest.cs index 04c94df17..7ccc08bae 100644 --- a/src/Orchard.Tests.Modules/Widgets/Services/WidgetsServiceTest.cs +++ b/src/Orchard.Tests.Modules/Widgets/Services/WidgetsServiceTest.cs @@ -90,6 +90,7 @@ namespace Orchard.Tests.Modules.Widgets.Services { 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/ContentManagement/ContentQueryTests.cs b/src/Orchard.Tests/ContentManagement/ContentQueryTests.cs index 34fef1583..3e9d3ea52 100644 --- a/src/Orchard.Tests/ContentManagement/ContentQueryTests.cs +++ b/src/Orchard.Tests/ContentManagement/ContentQueryTests.cs @@ -48,6 +48,7 @@ namespace Orchard.Tests.ContentManagement { builder.RegisterModule(new ContentModule()); builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(new Mock().Object); diff --git a/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs b/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs index 2b3927b58..dad21d5f5 100644 --- a/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs +++ b/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs @@ -61,6 +61,7 @@ namespace Orchard.Tests.ContentManagement { 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/ContentManagement/DynamicContentQueryTests.cs b/src/Orchard.Tests/ContentManagement/DynamicContentQueryTests.cs index b042ff3d9..274c16317 100644 --- a/src/Orchard.Tests/ContentManagement/DynamicContentQueryTests.cs +++ b/src/Orchard.Tests/ContentManagement/DynamicContentQueryTests.cs @@ -47,6 +47,7 @@ namespace Orchard.Tests.ContentManagement { builder.RegisterModule(new ContentModule()); builder.RegisterType().As().SingleInstance(); 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/HqlExpressionTests.cs b/src/Orchard.Tests/ContentManagement/HqlExpressionTests.cs index 403b0f4e8..94f9f6fb7 100644 --- a/src/Orchard.Tests/ContentManagement/HqlExpressionTests.cs +++ b/src/Orchard.Tests/ContentManagement/HqlExpressionTests.cs @@ -50,6 +50,7 @@ namespace Orchard.Tests.ContentManagement { builder.RegisterModule(new ContentModule()); builder.RegisterType().As().SingleInstance(); builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(new Mock().Object); builder.RegisterInstance(new Mock().Object); diff --git a/src/Orchard.Web/Modules/Orchard.MediaProcessing/Views/Admin/Index.cshtml b/src/Orchard.Web/Modules/Orchard.MediaProcessing/Views/Admin/Index.cshtml index 289a939cb..f93106174 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaProcessing/Views/Admin/Index.cshtml +++ b/src/Orchard.Web/Modules/Orchard.MediaProcessing/Views/Admin/Index.cshtml @@ -56,7 +56,7 @@ @Html.ActionLink(T("Properties").ToString(), "Edit", new { Area = "Contents", id = entry.ImageProfileId, returnurl = HttpContext.Current.Request.RawUrl }) | @Html.ActionLink(T("Edit").ToString(), "Edit", new { id = entry.ImageProfileId }) | - @Html.ActionLink(T("Delete").ToString(), "Delete", new { id = entry.ImageProfileId }, new { itemprop = "RemoveUrl UnsafeUrl" }) | + @Html.ActionLink(T("Delete").ToString(), "Delete", new { id = entry.ImageProfileId }, new { itemprop = "RemoveUrl UnsafeUrl" }) @*@Html.ActionLink(T("Preview").ToString(), "Preview", new { id = entry.ImageProfileId })*@ diff --git a/src/Orchard/ContentManagement/DefaultContentManager.cs b/src/Orchard/ContentManagement/DefaultContentManager.cs index c7881582a..869385462 100644 --- a/src/Orchard/ContentManagement/DefaultContentManager.cs +++ b/src/Orchard/ContentManagement/DefaultContentManager.cs @@ -34,6 +34,7 @@ namespace Orchard.ContentManagement { private readonly Lazy _sessionLocator; private readonly Lazy> _handlers; private readonly Lazy> _identityResolverSelectors; + private readonly ISignals _signals; private const string Published = "Published"; private const string Draft = "Draft"; @@ -49,7 +50,8 @@ namespace Orchard.ContentManagement { Lazy contentDisplay, Lazy sessionLocator, Lazy> handlers, - Lazy> identityResolverSelectors) { + Lazy> identityResolverSelectors, + ISignals signals) { _context = context; _contentTypeRepository = contentTypeRepository; _contentItemRepository = contentItemRepository; @@ -58,6 +60,7 @@ namespace Orchard.ContentManagement { _cacheManager = cacheManager; _contentManagerSession = contentManagerSession; _identityResolverSelectors = identityResolverSelectors; + _signals = signals; _handlers = handlers; _contentDisplay = contentDisplay; _sessionLocator = sessionLocator; @@ -720,6 +723,8 @@ namespace Orchard.ContentManagement { private ContentTypeRecord AcquireContentTypeRecord(string contentType) { var contentTypeId = _cacheManager.Get(contentType + "_Record", ctx => { + ctx.Monitor(_signals.When(contentType + "_Record")); + var contentTypeRecord = _contentTypeRepository.Get(x => x.Name == contentType); if (contentTypeRecord == null) { @@ -731,7 +736,20 @@ namespace Orchard.ContentManagement { return contentTypeRecord.Id; }); - return _contentTypeRepository.Get(contentTypeId); + // There is a case when a content type record is created locally but the transaction is actually + // cancelled. In this case we are caching an Id which is none existent, or might represent another + // content type. Thus we need to ensure that the cache is valid, or invalidate it and retrieve it + // another time. + + var result = _contentTypeRepository.Get(contentTypeId); + + if (result != null && result.Name.Equals(contentType, StringComparison.OrdinalIgnoreCase) ) { + return result; + } + + // invalidate the cache entry and load it again + _signals.Trigger(contentType + "_Record"); + return AcquireContentTypeRecord(contentType); } public void Index(ContentItem contentItem, IDocumentIndex documentIndex) {