| File: Filters\FilterCollection.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj (Microsoft.AspNetCore.Mvc.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.ObjectModel; using Microsoft.AspNetCore.Mvc.Core; namespace Microsoft.AspNetCore.Mvc.Filters; /// <summary> /// A collection of <see cref="IFilterMetadata"/>. /// </summary> public class FilterCollection : Collection<IFilterMetadata> { /// <summary> /// Adds a type representing a <see cref="IFilterMetadata"/>. /// </summary> /// <typeparam name="TFilterType">Type representing a <see cref="IFilterMetadata"/>.</typeparam> /// <returns>A <see cref="IFilterMetadata"/> representing the added type.</returns> /// <remarks> /// Filter instances will be created using /// <see cref="Microsoft.Extensions.DependencyInjection.ActivatorUtilities"/>. /// Use <see cref="AddService(Type)"/> to register a service as a filter. /// The added filter will be assigned an order of 0. /// </remarks> public IFilterMetadata Add<TFilterType>() where TFilterType : IFilterMetadata { return Add(typeof(TFilterType)); } /// <summary> /// Adds a type representing a <see cref="IFilterMetadata"/>. /// </summary> /// <param name="filterType">Type representing a <see cref="IFilterMetadata"/>.</param> /// <returns>A <see cref="IFilterMetadata"/> representing the added type.</returns> /// <remarks> /// Filter instances will be created using /// <see cref="Microsoft.Extensions.DependencyInjection.ActivatorUtilities"/>. /// Use <see cref="AddService(Type)"/> to register a service as a filter. /// The added filter will be assigned an order of 0. /// </remarks> public IFilterMetadata Add(Type filterType) { ArgumentNullException.ThrowIfNull(filterType); return Add(filterType, order: 0); } /// <summary> /// Adds a type representing a <see cref="IFilterMetadata"/>. /// </summary> /// <typeparam name="TFilterType">Type representing a <see cref="IFilterMetadata"/>.</typeparam> /// <param name="order">The order of the added filter.</param> /// <returns>A <see cref="IFilterMetadata"/> representing the added type.</returns> /// <remarks> /// Filter instances will be created using /// <see cref="Microsoft.Extensions.DependencyInjection.ActivatorUtilities"/>. /// Use <see cref="AddService(Type)"/> to register a service as a filter. /// </remarks> public IFilterMetadata Add<TFilterType>(int order) where TFilterType : IFilterMetadata { return Add(typeof(TFilterType), order); } /// <summary> /// Adds a type representing a <see cref="IFilterMetadata"/>. /// </summary> /// <param name="filterType">Type representing a <see cref="IFilterMetadata"/>.</param> /// <param name="order">The order of the added filter.</param> /// <returns>A <see cref="IFilterMetadata"/> representing the added type.</returns> /// <remarks> /// Filter instances will be created using /// <see cref="Microsoft.Extensions.DependencyInjection.ActivatorUtilities"/>. /// Use <see cref="AddService(Type)"/> to register a service as a filter. /// </remarks> public IFilterMetadata Add(Type filterType, int order) { ArgumentNullException.ThrowIfNull(filterType); if (!typeof(IFilterMetadata).IsAssignableFrom(filterType)) { var message = Resources.FormatTypeMustDeriveFromType( filterType.FullName, typeof(IFilterMetadata).FullName); throw new ArgumentException(message, nameof(filterType)); } var filter = new TypeFilterAttribute(filterType) { Order = order }; Add(filter); return filter; } /// <summary> /// Adds a type representing a <see cref="IFilterMetadata"/>. /// </summary> /// <typeparam name="TFilterType">Type representing a <see cref="IFilterMetadata"/>.</typeparam> /// <returns>A <see cref="IFilterMetadata"/> representing the added service type.</returns> /// <remarks> /// Filter instances will be created through dependency injection. Use /// <see cref="Add(Type)"/> to register a service that will be created via /// type activation. /// The added filter will be assigned an order of 0. /// </remarks> public IFilterMetadata AddService<TFilterType>() where TFilterType : IFilterMetadata { return AddService(typeof(TFilterType)); } /// <summary> /// Adds a type representing a <see cref="IFilterMetadata"/>. /// </summary> /// <param name="filterType">Type representing a <see cref="IFilterMetadata"/>.</param> /// <returns>A <see cref="IFilterMetadata"/> representing the added service type.</returns> /// <remarks> /// Filter instances will be created through dependency injection. Use /// <see cref="Add(Type)"/> to register a service that will be created via /// type activation. /// The added filter will be assigned an order of 0. /// </remarks> public IFilterMetadata AddService(Type filterType) { ArgumentNullException.ThrowIfNull(filterType); return AddService(filterType, order: 0); } /// <summary> /// Adds a type representing a <see cref="IFilterMetadata"/>. /// </summary> /// <typeparam name="TFilterType">Type representing a <see cref="IFilterMetadata"/>.</typeparam> /// <param name="order">The order of the added filter.</param> /// <returns>A <see cref="IFilterMetadata"/> representing the added service type.</returns> /// <remarks> /// Filter instances will be created through dependency injection. Use /// <see cref="Add(Type)"/> to register a service that will be created via /// type activation. /// </remarks> public IFilterMetadata AddService<TFilterType>(int order) where TFilterType : IFilterMetadata { return AddService(typeof(TFilterType), order); } /// <summary> /// Adds a type representing a <see cref="IFilterMetadata"/>. /// </summary> /// <param name="filterType">Type representing a <see cref="IFilterMetadata"/>.</param> /// <param name="order">The order of the added filter.</param> /// <returns>A <see cref="IFilterMetadata"/> representing the added service type.</returns> /// <remarks> /// Filter instances will be created through dependency injection. Use /// <see cref="Add(Type)"/> to register a service that will be created via /// type activation. /// </remarks> public IFilterMetadata AddService(Type filterType, int order) { ArgumentNullException.ThrowIfNull(filterType); if (!typeof(IFilterMetadata).IsAssignableFrom(filterType)) { var message = Resources.FormatTypeMustDeriveFromType( filterType.FullName, typeof(IFilterMetadata).FullName); throw new ArgumentException(message, nameof(filterType)); } var filter = new ServiceFilterAttribute(filterType) { Order = order }; Add(filter); return filter; } }