/// <summary> /// Callback invoked to set per-controller overrides for this controllerDescriptor. /// </summary> /// <param name="controllerSettings">The controller settings to initialize.</param> /// <param name="controllerDescriptor">The controller descriptor. Note that the <see /// cref="T:System.Web.Http.Controllers.HttpControllerDescriptor" /> can be associated with the derived /// controller type given that <see cref="T:System.Web.Http.Controllers.IControllerConfiguration" /> is /// inherited.</param> public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor) { if (controllerSettings == null) { throw new ArgumentNullException("controllerSettings"); } if (controllerDescriptor == null) { throw new ArgumentNullException("controllerDescriptor"); } ServicesContainer services = controllerSettings.Services; Contract.Assert(services != null); IContainerMetadata containerMetadata = controllerDescriptor.GetContainerMetadata(); // Replace the action selector with one that is based on the OData routing conventions IHttpActionSelector originalActionSelector = services.GetActionSelector(); IHttpActionSelector actionSelector; if (containerMetadata != null) { // ContainerMetadata was stored with the HttpControllerDescriptor - so use our "special" ActionSelector actionSelector = new EntityRepositoryActionSelector(containerMetadata, originalActionSelector); } else { // No ContainerMetadata stored with the HttpControllerDescriptor - so use the standard odata ActionSelector actionSelector = new ODataActionSelector(originalActionSelector); } controllerSettings.Services.Replace(typeof(IHttpActionSelector), actionSelector); }