/// <summary> /// Register an exception filter to specified <see cref="IExceptionManagerBuilder"/>. /// </summary> /// <param name="builder">The <see cref="IExceptionManagerBuilder"/> to which the exception filter is registered.</param> /// <param name="filterName">The name of the registered exception filter.</param> /// <param name="filterType">The type of exception filter.</param> /// <param name="argumnets">The arguments passed to construct the target exception filter.</param> /// <returns>The <see cref="IExceptionManagerBuilder"/> with the exception filter registration.</returns> /// <exception cref="ArgumentNullException">The specified <paramref name="builder"/> is null.</exception> /// <exception cref="ArgumentNullException">The specified <paramref name="filterName"/> is null.</exception> /// <exception cref="ArgumentNullException">The specified <paramref name="filterType"/> is null.</exception> /// <exception cref="ArgumentException">The specified <paramref name="filterName"/> is a white space string.</exception> public static IExceptionManagerBuilder UseFilter(this IExceptionManagerBuilder builder, string filterName, Type filterType, params object[] argumnets) { Guard.ArgumentNotNull(builder, nameof(builder)); Guard.ArgumentNotNullOrWhiteSpace(filterName, nameof(filterName)); Guard.ArgumentAssignableTo <IExceptionFilter>(filterType, nameof(filterType)); builder.GetFilters()[filterName] = (IExceptionFilter)ActivatorUtilities.CreateInstance(builder.ServiceProvider, filterType, argumnets); return(builder); }
/// <summary> /// Load exception policy settings to specified <see cref="IExceptionManagerBuilder"/>. /// </summary> /// <param name="builder">The <see cref="IExceptionManagerBuilder"/> to which the loaded settings is appled.</param> /// <param name="filePath">The path of the exception policy configuration file.</param> /// <param name="fileProvider">The <see cref="IFileProvider"/> used to load the configuration file.</param> /// <returns>The <see cref="IExceptionManagerBuilder"/> to which the loaded settings is appled.</returns> /// <remarks>If <paramref name="fileProvider"/> is not explicitly specified, the current directory specific <see cref="PhysicalFileProvider"/> will be used.</remarks> /// <exception cref="ArgumentNullException">The specified <paramref name="builder"/> is null.</exception> /// <exception cref="ArgumentNullException">The specified <paramref name="filePath"/> is null.</exception> /// <exception cref="ArgumentException">The specified <paramref name="filePath"/> is a white space string.</exception> public static IExceptionManagerBuilder LoadSettings(this IExceptionManagerBuilder builder, string filePath, IFileProvider fileProvider = null) { Guard.ArgumentNotNull(builder, nameof(builder)); Guard.ArgumentNotNullOrWhiteSpace(filePath, nameof(filePath)); fileProvider = fileProvider ?? new PhysicalFileProvider(Directory.GetCurrentDirectory()); var configBuilder = new ConfigurationBuilder(fileProvider, filePath); var policies = configBuilder.Build(out IDictionary <string, FilterConfiguration> filters); foreach (var it in filters) { ExceptionFilterConfiguration config = GetFilterConfiguration(it.Value.FilterType); config.Use(builder, it.Key, it.Value.Arguments.ToDictionary(item => item.Name, item => item.Value)); } foreach (var it in policies) { builder.AddPolicy(it.Key, policyBuilder => BuildPolicy(policyBuilder, it.Value, builder.GetFilters())); } return(builder); }
public void GetFilters_Argument_Not_Allow_Null() { IExceptionManagerBuilder builder = null; Assert.Throws <ArgumentNullException>(() => builder.GetFilters()); }