using NCC.Dependency;
using NCC.FriendlyException;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
namespace Microsoft.Extensions.DependencyInjection
{
///
/// 友好异常服务拓展类
///
[SuppressSniffer]
public static class FriendlyExceptionServiceCollectionExtensions
{
///
/// 添加友好异常服务拓展服务
///
/// 异常错误码提供器
/// Mvc构建器
/// 是否启用全局异常过滤器
///
public static IMvcBuilder AddFriendlyException(this IMvcBuilder mvcBuilder, Action configure = null)
where TErrorCodeTypeProvider : class, IErrorCodeTypeProvider
{
mvcBuilder.Services.AddFriendlyException(configure);
return mvcBuilder;
}
///
/// 添加友好异常服务拓展服务
///
/// 异常错误码提供器
///
///
///
public static IServiceCollection AddFriendlyException(this IServiceCollection services, Action configure = null)
where TErrorCodeTypeProvider : class, IErrorCodeTypeProvider
{
// 添加全局异常过滤器
services.AddFriendlyException(configure);
// 单例注册异常状态码提供器
services.AddSingleton();
return services;
}
///
/// 添加友好异常服务拓展服务
///
/// Mvc构建器
///
///
public static IMvcBuilder AddFriendlyException(this IMvcBuilder mvcBuilder, Action configure = null)
{
mvcBuilder.Services.AddFriendlyException(configure);
return mvcBuilder;
}
///
/// 添加友好异常服务拓展服务
///
///
///
///
public static IServiceCollection AddFriendlyException(this IServiceCollection services, Action configure = null)
{
// 添加友好异常配置文件支持
services.AddConfigurableOptions();
// 添加异常配置文件支持
services.AddConfigurableOptions();
// 载入服务配置选项
var configureOptions = new FriendlyExceptionServiceOptions();
configure?.Invoke(configureOptions);
// 添加全局异常过滤器
if (configureOptions.EnabledGlobalFriendlyException)
services.AddMvcFilter();
return services;
}
}
}