【问题标题】:What is the difference between the ResourceControllerFactory and the DefaultControllerFactory in ASP.NET MVC?ASP.NET MVC 中的 ResourceControllerFactory 和 DefaultControllerFactory 有什么区别?
【发布时间】: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


【解决方案1】:

ResourceControllerFactory 根据接受 HTTP 标头(我认为)提供自动响应序列化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多