【发布时间】:2023-03-21 19:16:02
【问题描述】:
ASP.NET MVC 中的 ResourceControllerFactory 和 DefaultControllerFactory 有什么区别?
上下文: 我希望将 IOC 容器挂接到控制器工厂 - 我之前已覆盖 DefaultControllerFactory 来执行此操作,但我看到 ResourceControllerFactory 在我的项目中使用目前正在合作。
是否提供对 REST API 的改进支持?
每个代码:
DefaultControllerFactory
public class DefaultControllerFactory : IControllerFactory
{
// Fields
private IBuildManager _buildManager;
private ControllerBuilder _controllerBuilder;
private ControllerTypeCache _instanceControllerTypeCache;
private static ControllerTypeCache _staticControllerTypeCache;
// Methods
static DefaultControllerFactory();
public DefaultControllerFactory();
internal static InvalidOperationException CreateAmbiguousControllerException(RouteBase route, string controllerName, ICollection<Type> matchingTypes);
public virtual IController CreateController(RequestContext requestContext, string controllerName);
protected internal virtual IController GetControllerInstance(RequestContext requestContext, Type controllerType);
protected internal virtual Type GetControllerType(RequestContext requestContext, string controllerName);
private Type GetControllerTypeWithinNamespaces(RouteBase route, string controllerName, HashSet<string> namespaces);
public virtual void ReleaseController(IController controller);
// Properties
internal IBuildManager BuildManager { get; set; }
internal ControllerBuilder ControllerBuilder { get; set; }
internal ControllerTypeCache ControllerTypeCache { get; set; }
}
ResourceControllerFactory
public class ResourceControllerFactory : IControllerFactory
{
// Fields
private IControllerFactory inner;
private const string restActionToken = "$REST$";
// Methods
public ResourceControllerFactory();
public ResourceControllerFactory(IControllerFactory inner);
public IController CreateController(RequestContext requestContext, string controllerName);
public void ReleaseController(IController controller);
// Nested Types
private class ResourceControllerActionInvoker : ControllerActionInvoker
{
// Methods
public ResourceControllerActionInvoker();
protected override ActionDescriptor FindAction(ControllerContext controllerContext, ControllerDescriptor controllerDescriptor, string actionName);
// Nested Types
private class ResourceErrorActionDescriptor : ActionDescriptor
{
// Fields
private ControllerDescriptor controllerDescriptor;
private string message;
private HttpStatusCode statusCode;
// Methods
public ResourceErrorActionDescriptor(ControllerDescriptor controllerDescriptor, HttpStatusCode statusCode, string message);
public override object Execute(ControllerContext controllerContext, IDictionary<string, object> parameters);
public override ParameterDescriptor[] GetParameters();
// Properties
public override string ActionName { get; }
public override ControllerDescriptor ControllerDescriptor { get; }
}
}
}
Expand Methods
【问题讨论】:
-
我很确定这只是来自 ASP.NET MVC REST API 工具包 - 只是为您编写代码。不要认为它是常规 MVC 源代码的一部分。
-
好的,谢谢,所以它通过 DefaultControllerFactory 提供了对 REST 的增强支持?
-
非常确定。没有什么是你自己无法实现的。你从哪里得到上面的代码 - 你能确认代码来自我提到的 DLL 吗?
-
代码来自 Reflector。 ResourceControllerFactory 在 System.Web.Mvc.Resources 程序集版本 1.0.0.0 中定义
-
哇——好吧,那我猜我错了。 :)
标签: asp.net asp.net-mvc controller-factory