- Use default controller factory behavior if no workcontext present.

- Fix unit tests.

--HG--
branch : dev
This commit is contained in:
Dave Reed
2010-11-10 11:15:19 -08:00
parent 8674ff9f56
commit db733373e5
2 changed files with 20 additions and 8 deletions

View File

@@ -20,8 +20,21 @@ namespace Orchard.Tests.Mvc {
[SetUp]
public void Init() {
var builder = new ContainerBuilder();
builder.RegisterType<FooController>()
.Keyed<IController>("/foo")
.Keyed<IController>(typeof(FooController))
.WithMetadata("ControllerType", typeof(FooController))
.InstancePerDependency();
builder.RegisterType<BarController>()
.Keyed<IController>("/bar")
.Keyed<IController>(typeof(BarController))
.WithMetadata("ControllerType", typeof(BarController))
.InstancePerDependency();
builder.RegisterType<ReplacementFooController>()
.Keyed<IController>("/foo")
.Keyed<IController>(typeof(ReplacementFooController))
.WithMetadata("ControllerType", typeof(ReplacementFooController))
.InstancePerDependency();
var container = builder.Build();

View File

@@ -12,8 +12,7 @@ namespace Orchard.Mvc {
public class OrchardControllerFactory : DefaultControllerFactory {
bool TryResolve<T>(RequestContext requestContext, object serviceKey, out T instance ) {
var workContext = requestContext.GetWorkContext();
bool TryResolve<T>(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<IController, IControllerType> 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) {