Merge pull request #5738 from harmony7/4852-orchardshellevents-workcontext

#4852: Wrap IOrchardShellEvents in a work context
This commit is contained in:
Sébastien Ros
2015-09-04 10:09:36 -07:00

View File

@@ -17,7 +17,7 @@ using IModelBinderProvider = Orchard.Mvc.ModelBinders.IModelBinderProvider;
namespace Orchard.Environment {
public class DefaultOrchardShell : IOrchardShell {
private readonly Func<Owned<IOrchardShellEvents>> _eventsFactory;
private readonly IWorkContextAccessor _workContextAccessor;
private readonly IEnumerable<IRouteProvider> _routeProviders;
private readonly IEnumerable<IHttpRouteProvider> _httpRouteProviders;
private readonly IRoutePublisher _routePublisher;
@@ -28,7 +28,7 @@ namespace Orchard.Environment {
private readonly ShellSettings _shellSettings;
public DefaultOrchardShell(
Func<Owned<IOrchardShellEvents>> eventsFactory,
IWorkContextAccessor workContextAccessor,
IEnumerable<IRouteProvider> routeProviders,
IEnumerable<IHttpRouteProvider> httpRouteProviders,
IRoutePublisher routePublisher,
@@ -37,7 +37,7 @@ namespace Orchard.Environment {
ISweepGenerator sweepGenerator,
IEnumerable<IOwinMiddlewareProvider> owinMiddlewareProviders,
ShellSettings shellSettings) {
_eventsFactory = eventsFactory;
_workContextAccessor = workContextAccessor;
_routeProviders = routeProviders;
_httpRouteProviders = httpRouteProviders;
_routePublisher = routePublisher;
@@ -76,8 +76,10 @@ namespace Orchard.Environment {
_routePublisher.Publish(allRoutes, pipeline);
_modelBinderPublisher.Publish(_modelBinderProviders.SelectMany(provider => provider.GetModelBinders()));
using (var events = _eventsFactory()) {
events.Value.Activated();
using (var scope = _workContextAccessor.CreateWorkContextScope()) {
using (var events = scope.Resolve<Owned<IOrchardShellEvents>>()) {
events.Value.Activated();
}
}
_sweepGenerator.Activate();
@@ -85,10 +87,12 @@ namespace Orchard.Environment {
public void Terminate() {
SafelyTerminate(() => {
using (var events = _eventsFactory()) {
SafelyTerminate(() => events.Value.Terminating());
}
});
using (var scope = _workContextAccessor.CreateWorkContextScope()) {
using (var events = scope.Resolve<Owned<IOrchardShellEvents>>()) {
SafelyTerminate(() => events.Value.Terminating());
}
}
});
SafelyTerminate(() => _sweepGenerator.Terminate());
}