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;
}
}
}