using NCC.DataValidation; using NCC.Dependency; using Microsoft.AspNetCore.Mvc; using System; namespace Microsoft.Extensions.DependencyInjection { /// /// 友好异常服务拓展类 /// [SuppressSniffer] public static class DataValidationServiceCollectionExtensions { /// /// 添加全局数据验证 /// /// 验证类型消息提供器 /// /// /// public static IMvcBuilder AddDataValidation(this IMvcBuilder mvcBuilder, Action configure = null) where TValidationMessageTypeProvider : class, IValidationMessageTypeProvider { // 添加全局数据验证 mvcBuilder.Services.AddDataValidation(configure); return mvcBuilder; } /// /// 添加全局数据验证 /// /// 验证类型消息提供器 /// /// /// public static IServiceCollection AddDataValidation(this IServiceCollection services, Action configure = null) where TValidationMessageTypeProvider : class, IValidationMessageTypeProvider { // 添加全局数据验证 services.AddDataValidation(configure); // 单例注册验证消息提供器 services.AddSingleton(); return services; } /// /// 添加全局数据验证 /// /// /// /// public static IMvcBuilder AddDataValidation(this IMvcBuilder mvcBuilder, Action configure = null) { mvcBuilder.Services.AddDataValidation(configure); return mvcBuilder; } /// /// 添加全局数据验证 /// /// /// /// public static IServiceCollection AddDataValidation(this IServiceCollection services, Action configure = null) { // 添加验证配置文件支持 services.AddConfigurableOptions(); // 载入服务配置选项 var configureOptions = new DataValidationServiceOptions(); configure?.Invoke(configureOptions); // 判断是否启用全局 if (configureOptions.EnableGlobalDataValidation) { // 添加自定义验证 services.Configure(options => { options.SuppressModelStateInvalidFilter = true; }); // 添加全局数据验证 services.AddMvcFilter(options => { // 关闭空引用对象验证 options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = configureOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes; }); } return services; } } }