diff --git a/src/Orchard.Core.Tests/Feeds/Controllers/FeedControllerTests.cs b/src/Orchard.Core.Tests/Feeds/Controllers/FeedControllerTests.cs index 7be62219d..e8cdd485a 100644 --- a/src/Orchard.Core.Tests/Feeds/Controllers/FeedControllerTests.cs +++ b/src/Orchard.Core.Tests/Feeds/Controllers/FeedControllerTests.cs @@ -27,7 +27,8 @@ namespace Orchard.Core.Tests.Feeds.Controllers { var controller = new FeedController( Enumerable.Empty(), Enumerable.Empty(), - Enumerable.Empty()) { + new StubItemBuilder() + ) { ValueProvider = Values.From(new { }) }; @@ -54,7 +55,8 @@ namespace Orchard.Core.Tests.Feeds.Controllers { var controller = new FeedController( new[] { queryProvider.Object }, new[] { formatProvider.Object }, - Enumerable.Empty()) { + new StubItemBuilder() + ) { ValueProvider = Values.From(new { }) }; @@ -86,15 +88,20 @@ namespace Orchard.Core.Tests.Feeds.Controllers { } } + class StubItemBuilder : IFeedItemBuilder { + public void Populate(FeedContext context) { + } + } + [Test] public void RssFeedShouldBeStructuredAppropriately() { var query = new StubQuery(Enumerable.Empty()); var builder = new ContainerBuilder(); - //builder.RegisterModule(new ImplicitCollectionSupportModule()); builder.RegisterType(); builder.RegisterType().As(); builder.RegisterInstance(query).As(); + builder.RegisterInstance(new StubItemBuilder()).As(); var container = builder.Build(); var controller = container.Resolve(); @@ -117,9 +124,9 @@ namespace Orchard.Core.Tests.Feeds.Controllers { }); var builder = new ContainerBuilder(); - //builder.RegisterModule(new ImplicitCollectionSupportModule()); builder.RegisterType(); builder.RegisterType().As(); + builder.RegisterInstance(new StubItemBuilder()).As(); builder.RegisterInstance(query).As(); var container = builder.Build(); diff --git a/src/Orchard.Web/Core/Feeds/Controllers/FeedController.cs b/src/Orchard.Web/Core/Feeds/Controllers/FeedController.cs index 0e75dca60..bde60e4a1 100644 --- a/src/Orchard.Web/Core/Feeds/Controllers/FeedController.cs +++ b/src/Orchard.Web/Core/Feeds/Controllers/FeedController.cs @@ -10,15 +10,15 @@ namespace Orchard.Core.Feeds.Controllers { public class FeedController : Controller { private readonly IEnumerable _feedFormatProviders; private readonly IEnumerable _feedQueryProviders; - private readonly IEnumerable _feedItemBuilders; + private readonly IFeedItemBuilder _feedItemBuilder; public FeedController( IEnumerable feedQueryProviders, IEnumerable feedFormatProviders, - IEnumerable feedItemBuilders) { + IFeedItemBuilder feedItemBuilder) { _feedQueryProviders = feedQueryProviders; _feedFormatProviders = feedFormatProviders; - _feedItemBuilders = feedItemBuilders; + _feedItemBuilder = feedItemBuilder; Logger = NullLogger.Instance; } @@ -49,9 +49,7 @@ namespace Orchard.Core.Feeds.Controllers { return context.Builder.Process(context, () => { bestQueryMatch.FeedQuery.Execute(context); - foreach (var feedItemBuilder in _feedItemBuilders) { - feedItemBuilder.Populate(context); - } + _feedItemBuilder.Populate(context); foreach (var contextualizer in context.Response.Contextualizers) { if (ControllerContext != null && ControllerContext.RequestContext != null) { diff --git a/src/Orchard.Web/Core/Feeds/StandardBuilders/CorePartsFeedItemBuilder.cs b/src/Orchard.Web/Core/Feeds/StandardBuilders/CorePartsFeedItemBuilder.cs index f205d059d..332c8c698 100644 --- a/src/Orchard.Web/Core/Feeds/StandardBuilders/CorePartsFeedItemBuilder.cs +++ b/src/Orchard.Web/Core/Feeds/StandardBuilders/CorePartsFeedItemBuilder.cs @@ -9,7 +9,7 @@ using Orchard.Core.Feeds.Models; namespace Orchard.Core.Feeds.StandardBuilders { [UsedImplicitly] - public class CorePartsFeedItemBuilder : IFeedItemBuilder, IDependency { + public class CorePartsFeedItemBuilder : IFeedItemBuilder { private readonly IContentManager _contentManager; private readonly RouteCollection _routes; diff --git a/src/Orchard.Web/Core/Scheduling/Services/ScheduledTaskExecutor.cs b/src/Orchard.Web/Core/Scheduling/Services/ScheduledTaskExecutor.cs index 5df76c8c2..94e7ac005 100644 --- a/src/Orchard.Web/Core/Scheduling/Services/ScheduledTaskExecutor.cs +++ b/src/Orchard.Web/Core/Scheduling/Services/ScheduledTaskExecutor.cs @@ -12,7 +12,7 @@ using Orchard.Tasks.Scheduling; namespace Orchard.Core.Scheduling.Services { [UsedImplicitly] - public class ScheduledTaskExecutor : IBackgroundTask, IDependency { + public class ScheduledTaskExecutor : IBackgroundTask { private readonly IClock _clock; private readonly IRepository _repository; private readonly IEnumerable _handlers; diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Feeds/CommentFeedItemBuilder.cs b/src/Orchard.Web/Modules/Orchard.Comments/Feeds/CommentFeedItemBuilder.cs index 5f2ce82a8..75ab77447 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Feeds/CommentFeedItemBuilder.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Feeds/CommentFeedItemBuilder.cs @@ -12,7 +12,7 @@ using Orchard.Localization; namespace Orchard.Comments.Feeds { [UsedImplicitly] - public class CommentFeedItemBuilder : IFeedItemBuilder, IDependency { + public class CommentFeedItemBuilder : IFeedItemBuilder { private readonly IContentManager _contentManager; public CommentFeedItemBuilder( diff --git a/src/Orchard.Web/Modules/Orchard.Pages/Security/AuthorizationEventHandler.cs b/src/Orchard.Web/Modules/Orchard.Pages/Security/AuthorizationEventHandler.cs index 0c5288e7f..f86b68305 100644 --- a/src/Orchard.Web/Modules/Orchard.Pages/Security/AuthorizationEventHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Pages/Security/AuthorizationEventHandler.cs @@ -7,7 +7,7 @@ using Orchard.Security.Permissions; namespace Orchard.Pages.Security { [UsedImplicitly] - public class AuthorizationEventHandler : IAuthorizationServiceEventHandler, IDependency { + public class AuthorizationEventHandler : IAuthorizationServiceEventHandler { public void Checking(CheckAccessContext context) { } public void Complete(CheckAccessContext context) { } diff --git a/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs b/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs index 5c4f7da10..67eac9c64 100644 --- a/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs +++ b/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs @@ -62,7 +62,9 @@ namespace Orchard.Environment.ShellBuilders { .EnableDynamicProxy(dynamicProxyContext) .InstancePerLifetimeScope(); - foreach (var interfaceType in item.Type.GetInterfaces().Where(itf => typeof(IDependency).IsAssignableFrom(itf))) { + foreach (var interfaceType in item.Type.GetInterfaces() + .Where(itf => typeof(IDependency).IsAssignableFrom(itf) + && !typeof(IEventHandler).IsAssignableFrom(itf))) { registration = registration.As(interfaceType); if (typeof(ISingletonDependency).IsAssignableFrom(interfaceType)) { registration = registration.InstancePerMatchingLifetimeScope("shell"); diff --git a/src/Orchard/Events/DefaultOrchardEventBus.cs b/src/Orchard/Events/DefaultOrchardEventBus.cs index f93244400..bcc835836 100644 --- a/src/Orchard/Events/DefaultOrchardEventBus.cs +++ b/src/Orchard/Events/DefaultOrchardEventBus.cs @@ -8,9 +8,9 @@ using Orchard.Logging; namespace Orchard.Events { public class DefaultOrchardEventBus : IEventBus { private readonly Func> _handlers; - private readonly IEnumerable _eventHandlers; + private readonly Func> _eventHandlers; - public DefaultOrchardEventBus(Func> handlers, IEnumerable eventHandlers) { + public DefaultOrchardEventBus(Func> handlers, Func> eventHandlers) { _handlers = handlers; _eventHandlers = eventHandlers; Logger = NullLogger.Instance; @@ -34,7 +34,7 @@ namespace Orchard.Events { string interfaceName = parameters[0]; string methodName = parameters[1]; - foreach (var eventHandler in _eventHandlers) { + foreach (var eventHandler in _eventHandlers()) { TryInvoke(eventHandler, interfaceName, methodName, eventData); } } diff --git a/src/Orchard/Events/IEventHandler.cs b/src/Orchard/Events/IEventHandler.cs index b40f7ae9a..2dbd17c04 100644 --- a/src/Orchard/Events/IEventHandler.cs +++ b/src/Orchard/Events/IEventHandler.cs @@ -1,4 +1,4 @@ namespace Orchard.Events { - public interface IEventHandler { + public interface IEventHandler : IDependency { } } diff --git a/src/Orchard/Tasks/BackgroundService.cs b/src/Orchard/Tasks/BackgroundService.cs index 2614af9b7..ee76fbca7 100644 --- a/src/Orchard/Tasks/BackgroundService.cs +++ b/src/Orchard/Tasks/BackgroundService.cs @@ -1,4 +1,3 @@ -using System.Collections.Generic; using JetBrains.Annotations; using Orchard.Logging; @@ -10,9 +9,9 @@ namespace Orchard.Tasks { [UsedImplicitly] public class BackgroundService : IBackgroundService { - private readonly IEnumerable _tasks; + private readonly IBackgroundTask _tasks; - public BackgroundService(IEnumerable tasks) { + public BackgroundService(IBackgroundTask tasks) { _tasks = tasks; Logger = NullLogger.Instance; } @@ -20,9 +19,7 @@ namespace Orchard.Tasks { public ILogger Logger { get; set; } public void Sweep() { - foreach (var task in _tasks) { - task.Sweep(); - } + _tasks.Sweep(); } } } diff --git a/src/Orchard/UI/Zones/IZoneManagerEvents.cs b/src/Orchard/UI/Zones/IZoneManagerEvents.cs index 4eb7273f6..eb7e5c5ef 100644 --- a/src/Orchard/UI/Zones/IZoneManagerEvents.cs +++ b/src/Orchard/UI/Zones/IZoneManagerEvents.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using System.Web.Mvc; +using Orchard.Events; namespace Orchard.UI.Zones { - public interface IZoneManagerEvents : IEvents { + public interface IZoneManagerEvents : IEventHandler { void ZoneRendering(ZoneRenderContext context); void ZoneItemRendering(ZoneRenderContext context, ZoneItem item); void ZoneItemRendered(ZoneRenderContext context, ZoneItem item); diff --git a/src/Orchard/UI/Zones/ZoneManager.cs b/src/Orchard/UI/Zones/ZoneManager.cs index 932154039..a7794399f 100644 --- a/src/Orchard/UI/Zones/ZoneManager.cs +++ b/src/Orchard/UI/Zones/ZoneManager.cs @@ -8,10 +8,10 @@ using Orchard.UI.Navigation; namespace Orchard.UI.Zones { public class ZoneManager : IZoneManager { - private readonly IEnumerable _events; + private readonly IEnumerable _zoneManagerEventHandler; - public ZoneManager(IEnumerable events) { - _events = events; + public ZoneManager(IEnumerable eventHandler) { + _zoneManagerEventHandler = eventHandler; Logger = NullLogger.Instance; } @@ -38,16 +38,23 @@ namespace Orchard.UI.Zones { RenderingItems = groups.SelectMany(x => x.Items).ToList() }; - _events.Invoke(x => x.ZoneRendering(context), Logger); + foreach (var zoneManagerEventHandler in _zoneManagerEventHandler) { + zoneManagerEventHandler.ZoneRendering(context); + } foreach (var item in context.RenderingItems) { var zoneItem = item; - _events.Invoke(x => x.ZoneItemRendering(context, zoneItem), Logger); + foreach (var zoneManagerEventHandler in _zoneManagerEventHandler) { + zoneManagerEventHandler.ZoneItemRendering(context, zoneItem); + } zoneItem.WasExecuted = true; zoneItem.Execute(html); - _events.Invoke(x => x.ZoneItemRendered(context, zoneItem), Logger); + foreach (var zoneManagerEventHandler in _zoneManagerEventHandler) { + zoneManagerEventHandler.ZoneItemRendered(context, zoneItem); + } + } + foreach (var zoneManagerEventHandler in _zoneManagerEventHandler) { + zoneManagerEventHandler.ZoneRendered(context); } - _events.Invoke(x => x.ZoneRendered(context), Logger); - } protected ILogger Logger { get; set; }