簡體   English   中英

ASP.NET MVC中的ResourceControllerFactory和DefaultControllerFactory有什么區別?

[英]What is the difference between the ResourceControllerFactory and the DefaultControllerFactory in ASP.NET MVC?

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

ResourceControllerFactory根據接受的HTTP標頭提供自動響應序列化(我認為)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM