mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
- Use default controller factory behavior if no workcontext present.
- Fix unit tests.
This commit is contained in:
@@ -19,8 +19,21 @@ namespace Orchard.Tests.Mvc {
|
|||||||
[SetUp]
|
[SetUp]
|
||||||
public void Init() {
|
public void Init() {
|
||||||
var builder = new ContainerBuilder();
|
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>()
|
builder.RegisterType<ReplacementFooController>()
|
||||||
.Keyed<IController>("/foo")
|
.Keyed<IController>("/foo")
|
||||||
|
.Keyed<IController>(typeof(ReplacementFooController))
|
||||||
|
.WithMetadata("ControllerType", typeof(ReplacementFooController))
|
||||||
.InstancePerDependency();
|
.InstancePerDependency();
|
||||||
|
|
||||||
var container = builder.Build();
|
var container = builder.Build();
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ namespace Orchard.Mvc {
|
|||||||
|
|
||||||
public class OrchardControllerFactory : DefaultControllerFactory {
|
public class OrchardControllerFactory : DefaultControllerFactory {
|
||||||
|
|
||||||
bool TryResolve<T>(RequestContext requestContext, object serviceKey, out T instance ) {
|
bool TryResolve<T>(WorkContext workContext, object serviceKey, out T instance ) {
|
||||||
var workContext = requestContext.GetWorkContext();
|
|
||||||
if (workContext != null) {
|
if (workContext != null) {
|
||||||
var key = new KeyedService(serviceKey, typeof (T));
|
var key = new KeyedService(serviceKey, typeof (T));
|
||||||
object value;
|
object value;
|
||||||
@@ -38,22 +37,22 @@ namespace Orchard.Mvc {
|
|||||||
|
|
||||||
// Now that the request container is known - try to resolve the controller information
|
// Now that the request container is known - try to resolve the controller information
|
||||||
Lazy<IController, IControllerType> info;
|
Lazy<IController, IControllerType> info;
|
||||||
if (TryResolve(requestContext, serviceKey, out info)) {
|
var workContext = requestContext.GetWorkContext();
|
||||||
|
if (TryResolve(workContext, serviceKey, out info)) {
|
||||||
return info.Metadata.ControllerType;
|
return info.Metadata.ControllerType;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fail as appropriate for MVC's expectations
|
return workContext == null ? base.GetControllerType(requestContext, controllerName) : null;
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override IController GetControllerInstance(RequestContext requestContext, System.Type controllerType) {
|
protected override IController GetControllerInstance(RequestContext requestContext, System.Type controllerType) {
|
||||||
IController controller;
|
IController controller;
|
||||||
if (TryResolve(requestContext, controllerType, out controller)) {
|
var workContext = requestContext.GetWorkContext();
|
||||||
|
if (TryResolve(workContext, controllerType, out controller)) {
|
||||||
return controller;
|
return controller;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fail as appropriate for MVC's expectations
|
return workContext == null ? base.GetControllerInstance(requestContext, controllerType) : null;
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetAreaName(RouteBase route) {
|
public static string GetAreaName(RouteBase route) {
|
||||||
|
|||||||
Reference in New Issue
Block a user