public virtual void ProvideFilter(FilterProviderContext context, FilterItem filterItem) { if (filterItem.Filter != null) { return; } var filter = filterItem.Descriptor.Filter; var filterFactory = filter as IFilterFactory; if (filterFactory == null) { filterItem.Filter = filter; filterItem.IsReusable = true; } else { var services = context.ActionContext.HttpContext.RequestServices; filterItem.Filter = filterFactory.CreateInstance(services); filterItem.IsReusable = filterFactory.IsReusable; if (filterItem.Filter == null) { throw new InvalidOperationException(Resources.FormatTypeMethodMustReturnNotNullValue( "CreateInstance", typeof(IFilterFactory).Name)); } ApplyFilterToContainer(filterItem.Filter, filterFactory); } }
/// <inheritdoc /> public void OnProvidersExecuting(FilterProviderContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var services = context.ActionContext.HttpContext.RequestServices; var filters = services.GetService<IEnumerable<IFilterMetadata>>(); if (context.ActionContext.ActionDescriptor.FilterDescriptors != null) { foreach (var filter in filters) { var filterItem = new FilterItem(new FilterDescriptor(filter, FilterScope.Global), filter) { IsReusable = false }; // TODO: Remove this when https://github.com/aspnet/Mvc/issues/4504 // is fixed for (var i=0; i < context.Results.Count; i++) { if(context.Results[i].Filter.GetType() == filter.GetType()) { context.Results.RemoveAt(i); break; } } context.Results.Add(filterItem); } } }
public void ProvideFilter(FilterProviderContext context, FilterItem filterItem) { if (filterItem.Filter != null) { return; } var filter = filterItem.Descriptor.Filter; if (!(filter is IFilterFactory filterFactory)) { filterItem.Filter = filter; filterItem.IsReusable = true; }
private static IFilterMetadata[] CreateUncachedFiltersCore( IFilterProvider[] filterProviders, ActionContext actionContext, List <FilterItem> filterItems) { // Execute providers var context = new FilterProviderContext(actionContext, filterItems); for (var i = 0; i < filterProviders.Length; i++) { filterProviders[i].OnProvidersExecuting(context); } for (var i = filterProviders.Length - 1; i >= 0; i--) { filterProviders[i].OnProvidersExecuted(context); } // Extract filter instances from statically defined filters and filter providers var count = 0; for (var i = 0; i < filterItems.Count; i++) { if (filterItems[i].Filter != null) { count++; } } if (count == 0) { return(Array.Empty <IFilterMetadata>()); } else { var filters = new IFilterMetadata[count]; var filterIndex = 0; for (int i = 0; i < filterItems.Count; i++) { var filter = filterItems[i].Filter; if (filter != null) { filters[filterIndex++] = filter; } } return(filters); } }
/// <inheritdoc /> public void OnProvidersExecuting(FilterProviderContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (context.ActionContext.ActionDescriptor.FilterDescriptors != null) { // Perf: Avoid allocations for (var i = 0; i < context.Results.Count; i++) { ProvideFilter(context, context.Results[i]); } } }
/// <inheritdoc /> public void OnProvidersExecuting(FilterProviderContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (context.ActionContext.ActionDescriptor.FilterDescriptors != null) { var results = context.Results; // Perf: Avoid allocating enumerator and read interface .Count once rather than per iteration var resultsCount = results.Count; for (var i = 0; i < resultsCount; i++) { ProvideFilter(context, results[i]); } } }
/// <inheritdoc /> public void OnProvidersExecuting(FilterProviderContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var services = context.ActionContext.HttpContext.RequestServices; var filters = services.GetService<IEnumerable<IFilterMetadata>>(); if (context.ActionContext.ActionDescriptor.FilterDescriptors != null) { foreach (var filter in filters) { var filterItem = new FilterItem(new FilterDescriptor(filter, FilterScope.Global), filter); context.Results.Add(filterItem); } } }
public void OnProvidersExecuting(FilterProviderContext context) { if (context.ActionContext.ActionDescriptor.FilterDescriptors != null) { var overrideFilters = context.Results.Where(filterItem => filterItem.Filter is OverrideFilter).ToArray(); if (overrideFilters.Length > 0) { for (var i = context.Results.Count - 1; i >= 0; i--) { foreach (var overrideFilter in overrideFilters) { if (context.Results[i].Descriptor.Filter.GetType() == ((OverrideFilter)overrideFilter.Filter).Type && context.Results[i].Descriptor.Scope <= overrideFilter.Descriptor.Scope) { context.Results.Remove(context.Results[i]); } } } } } }
/// <inheritdoc /> public void OnProvidersExecuted(FilterProviderContext context) { }
public void OnProvidersExecuted(FilterProviderContext context) { _providerExecuted?.Invoke(context); }
public void OnProvidersExecuted(FilterProviderContext context) { }