// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using Microsoft.AspNet.Mvc.ApplicationModels;
using Microsoft.Framework.Internal;
namespace Microsoft.AspNet.Mvc
{
///
/// Contains the extension methods for .
///
public static class ApplicationModelConventionExtensions
{
///
/// Adds a to all the controllers in the application.
///
/// The list of
/// in .
/// The which needs to be
/// added.
public static void Add(
[NotNull] this IList conventions,
[NotNull] IControllerModelConvention controllerModelConvention)
{
conventions.Add(new ControllerApplicationModelConvention(controllerModelConvention));
}
///
/// Adds a to all the actions in the application.
///
/// The list of
/// in .
/// The which needs to be
/// added.
public static void Add(
this IList conventions,
IActionModelConvention actionModelConvention)
{
conventions.Add(new ActionApplicationModelConvention(actionModelConvention));
}
private class ActionApplicationModelConvention : IApplicationModelConvention
{
private IActionModelConvention _actionModelConvention;
///
/// Initializes a new instance of .
///
/// The action convention to be applied on all actions
/// in the application.
public ActionApplicationModelConvention([NotNull] IActionModelConvention actionModelConvention)
{
_actionModelConvention = actionModelConvention;
}
///
public void Apply([NotNull] ApplicationModel application)
{
foreach (var controller in application.Controllers)
{
foreach (var action in controller.Actions)
{
_actionModelConvention.Apply(action);
}
}
}
}
private class ControllerApplicationModelConvention : IApplicationModelConvention
{
private IControllerModelConvention _controllerModelConvention;
///
/// Initializes a new instance of .
///
/// The controller convention to be applied on all controllers
/// in the application.
public ControllerApplicationModelConvention([NotNull] IControllerModelConvention controllerConvention)
{
_controllerModelConvention = controllerConvention;
}
///
public void Apply([NotNull] ApplicationModel application)
{
foreach (var controller in application.Controllers)
{
_controllerModelConvention.Apply(controller);
}
}
}
}
}