From db733373e57d794e17b6a0752c172b06d4915d82 Mon Sep 17 00:00:00 2001 From: Dave Reed Date: Wed, 10 Nov 2010 11:15:19 -0800 Subject: [PATCH] - Use default controller factory behavior if no workcontext present. - Fix unit tests. --HG-- branch : dev --- .../Mvc/OrchardControllerFactoryTests.cs | 13 +++++++++++++ src/Orchard/Mvc/OrchardControllerFactory.cs | 15 +++++++-------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/Orchard.Tests/Mvc/OrchardControllerFactoryTests.cs b/src/Orchard.Tests/Mvc/OrchardControllerFactoryTests.cs index 13a6bca45..ff1c67715 100644 --- a/src/Orchard.Tests/Mvc/OrchardControllerFactoryTests.cs +++ b/src/Orchard.Tests/Mvc/OrchardControllerFactoryTests.cs @@ -20,8 +20,21 @@ namespace Orchard.Tests.Mvc { [SetUp] public void Init() { var builder = new ContainerBuilder(); + builder.RegisterType() + .Keyed("/foo") + .Keyed(typeof(FooController)) + .WithMetadata("ControllerType", typeof(FooController)) + .InstancePerDependency(); + builder.RegisterType() + .Keyed("/bar") + .Keyed(typeof(BarController)) + .WithMetadata("ControllerType", typeof(BarController)) + .InstancePerDependency(); + builder.RegisterType() .Keyed("/foo") + .Keyed(typeof(ReplacementFooController)) + .WithMetadata("ControllerType", typeof(ReplacementFooController)) .InstancePerDependency(); var container = builder.Build(); diff --git a/src/Orchard/Mvc/OrchardControllerFactory.cs b/src/Orchard/Mvc/OrchardControllerFactory.cs index 8313eae87..4f5510299 100644 --- a/src/Orchard/Mvc/OrchardControllerFactory.cs +++ b/src/Orchard/Mvc/OrchardControllerFactory.cs @@ -12,8 +12,7 @@ namespace Orchard.Mvc { public class OrchardControllerFactory : DefaultControllerFactory { - bool TryResolve(RequestContext requestContext, object serviceKey, out T instance ) { - var workContext = requestContext.GetWorkContext(); + bool TryResolve(WorkContext workContext, object serviceKey, out T instance ) { if (workContext != null) { var key = new KeyedService(serviceKey, typeof (T)); object value; @@ -38,22 +37,22 @@ namespace Orchard.Mvc { // Now that the request container is known - try to resolve the controller information Lazy info; - if (TryResolve(requestContext, serviceKey, out info)) { + var workContext = requestContext.GetWorkContext(); + if (TryResolve(workContext, serviceKey, out info)) { return info.Metadata.ControllerType; } - // fail as appropriate for MVC's expectations - return null; + return workContext == null ? base.GetControllerType(requestContext, controllerName) : null; } protected override IController GetControllerInstance(RequestContext requestContext, System.Type controllerType) { IController controller; - if (TryResolve(requestContext, controllerType, out controller)) { + var workContext = requestContext.GetWorkContext(); + if (TryResolve(workContext, controllerType, out controller)) { return controller; } - // fail as appropriate for MVC's expectations - return null; + return workContext == null ? base.GetControllerInstance(requestContext, controllerType) : null; } public static string GetAreaName(RouteBase route) {