1. 三种验证方法
- 直接注册验证函数
- 实现 IValidateOptions<TOptions>
- 使用Microsoft.Extensions.Options.DataAnnotations
2. 直接注册验证函数代码
public static class OrderServiceExtensions
{
public static IServiceCollection AddOrderService(this IServiceCollection services,
IConfiguration configuration)
{
//services.Configure<OrderServiceOptions>(configuration);
//需要添加验证的时候不能用Configure,要用AddOptions
services.AddOptions<OrderServiceOptions>().Configure(option =>
{
configuration.Bind(option);
}).Validate(option =>
{
return option.MaxCount <= 100;
}, "MaxCount不能大于等于100");
services.AddSingleton<IOrderService, OrderService>();
return services;
}
}
3. 实现实现 IValidateOptions<TOptions>代码
public static IServiceCollection AddOrderService(this IServiceCollection services,
IConfiguration configuration)
{
//services.Configure<OrderServiceOptions>(configuration);
//需要添加验证的时候不能用Configure,要用AddOptions
services.AddOptions<OrderServiceOptions>().Configure(option =>
{
configuration.Bind(option);
}).Services.AddSingleton<IValidateOptions<OrderServiceOptions>, OrderServiceValidateOptions>();
services.AddSingleton<IOrderService, OrderService>();
return services;
}
public class OrderServiceValidateOptions : IValidateOptions<OrderServiceOptions>
{
public ValidateOptionsResult Validate(string name, OrderServiceOptions options)
{
if(options.MaxCount > 100)
{
return ValidateOptionsResult.Fail("MAXCount不能大于100");
}
else
{
return ValidateOptionsResult.Success;
}
}
}
4. 使用使用Microsoft.Extensions.Options.DataAnnotations代码
public static IServiceCollection AddOrderService(this IServiceCollection services,
IConfiguration configuration)
{
//services.Configure<OrderServiceOptions>(configuration);
//需要添加验证的时候不能用Configure,要用AddOptions
services.AddOptions<OrderServiceOptions>().Configure(option =>
{
configuration.Bind(option);
}).ValidateDataAnnotations();
services.AddSingleton<IOrderService, OrderService>();
return services;
}
public class OrderServiceOptions
{
[Range(1,20)]
public int MaxCount { get; set; } = 100;
}