/* **************************************************************************** * * Copyright (c) Microsoft Corporation. All rights reserved. * * This software is subject to the Microsoft Public License (Ms-PL). * A copy of the license can be found in the license.htm file included * in this distribution. * * You must not remove this notice, or any other, from this software. * * ***************************************************************************/ namespace System.Web.Mvc.Async { using System; public class ReflectedAsyncControllerDescriptor : ControllerDescriptor { private static readonly ActionDescriptor[] _emptyCanonicalActions = new ActionDescriptor[0]; private readonly Type _controllerType; private readonly AsyncActionMethodSelector _selector; public ReflectedAsyncControllerDescriptor(Type controllerType) { if (controllerType == null) { throw new ArgumentNullException("controllerType"); } _controllerType = controllerType; _selector = new AsyncActionMethodSelector(_controllerType); } public sealed override Type ControllerType { get { return _controllerType; } } public override ActionDescriptor FindAction(ControllerContext controllerContext, string actionName) { if (controllerContext == null) { throw new ArgumentNullException("controllerContext"); } if (String.IsNullOrEmpty(actionName)) { throw Error.ParameterCannotBeNullOrEmpty("actionName"); } ActionDescriptorCreator creator = _selector.FindAction(controllerContext, actionName); if (creator == null) { return null; } return creator(actionName, this); } public override ActionDescriptor[] GetCanonicalActions() { // everything is looked up dymanically, so there are no 'canonical' actions return _emptyCanonicalActions; } public override object[] GetCustomAttributes(bool inherit) { return ControllerType.GetCustomAttributes(inherit); } public override object[] GetCustomAttributes(Type attributeType, bool inherit) { return ControllerType.GetCustomAttributes(attributeType, inherit); } public override bool IsDefined(Type attributeType, bool inherit) { return ControllerType.IsDefined(attributeType, inherit); } } }