大数跨境
0
0

.net core 中通过 PostConfigure 验证 Options 参数

.net core 中通过 PostConfigure 验证 Options 参数 amazingdotnet
2019-11-25
0
导读:在 .net core 中配置项推荐用 Options 来实现,有一些参数可能必须是用由用户来配置,这样就需要对 Options 中的参数做一些校验,今天介绍一个比较简单的方式来实现 Options

.net core 中通过 PostConfigure 验证 Options 参数

Intro

在 .net core 中配置项推荐用 Options 来实现,有一些参数可能必须是用由用户来配置,不能直接写成默认值的参数,这样就需要就 Options 中的参数做一些校验,否则程序内部可能就会出现一些意想不到的异常,今天介绍一个比较简单的,通过 PostConfigure 的方式来实现Options 参数的校验。

实现

在 PostConfigure 的委托中对所需验证的参数进行检查,如果参数不合法就抛一个异常出来, 在依赖注入获取这个 Option 的时候如果不满足条件就会抛出一个异常,而通过异常的 stacktrace 就可以看出来是哪里的错误了

 
  1. public static IServiceCollection AddAliyunService(this IServiceCollection serviceCollection, Action<AliyunServiceOption> configAction)

  2. {

  3. if (configAction != null)

  4. {

  5. serviceCollection.Configure(configAction);

  6. }

  7. serviceCollection.PostConfigure<AliyunServiceOption>(options =>

  8. {

  9. if (string.IsNullOrWhiteSpace(options.AccessKeyId))

  10. {

  11. throw new ArgumentNullException(nameof(options.AccessKeyId), $"{nameof(AliyunServiceOption)} {nameof(options.AccessKeyId)} can not be null or empty");

  12. }

  13. if (string.IsNullOrWhiteSpace(options.AccessKeySecret))

  14. {

  15. throw new ArgumentNullException(nameof(options.AccessKeySecret), $"{nameof(AliyunServiceOption)} {nameof(options.AccessKeySecret)} can not be null or empty");

  16. }

  17. });

  18. serviceCollection.TryAddSingleton<IAliyunService, AliyunService>();

  19. return serviceCollection;

  20. }

在 Reference 中给出了一些其他的实现方式,可以参考,在此不做详细介绍。

.net core 之后版本微软可能会给出一个更好的验证方式,详见 Options Validation: support eager validation

Reference

  • https://stackoverflow.com/questions/49651259/asp-net-core-option-validation

  • https://github.com/aspnet/Extensions/issues/459

  • https://www.stevejgordon.co.uk/asp-net-core-2-2-options-validation


【声明】内容源于网络
0
0
amazingdotnet
dotnet 开发知识库,了不起的 dotnet,dotnet 奇淫怪巧
内容 539
粉丝 0
amazingdotnet dotnet 开发知识库,了不起的 dotnet,dotnet 奇淫怪巧
总阅读131
粉丝0
内容539