[英]What is the difference between the ResourceControllerFactory and the DefaultControllerFactory in ASP.NET MVC?
What is the difference between the ResourceControllerFactory and the DefaultControllerFactory in ASP.NET MVC? ASP.NET MVC中的ResourceControllerFactory和DefaultControllerFactory有什么区别?
Context: I am looking to hook an IOC container into the controller factory - I have previously overriden the DefaultControllerFactory
to do this, but I see the ResourceControllerFactory
being used in a project I am currently working with. 上下文:我正在寻求将IOC容器挂接到控制器工厂中-之前我已经重写DefaultControllerFactory
来做到这一点,但是我看到ResourceControllerFactory
正在我当前正在使用的项目中使用。
Does one provide improved support for REST APIs? 是否提供对REST API的改进支持?
Code for each: 每个代码:
DefaultControllerFactory 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 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.