.net core 驗證 Options 引數

WeihanLi發表於2019-01-16

.net core 中通過 PostConfigure 驗證 Options 引數

Intro

在 .net core 中配置項推薦用 Options 來實現,有一些引數可能必須是用由使用者來配置,不能直接寫成預設值的引數,這樣就需要就 Options 中的引數做一些校驗,否則程式內部可能就會出現一些意想不到的異常,今天介紹一個比較簡單的,通過 PostConfigure 的方式來實現Options 引數的校驗。

實現

在 PostConfigure 的委託中對所需驗證的引數進行檢查,如果引數不合法就拋一個異常出來,
在依賴注入獲取這個 Option 的時候如果不滿足條件就會丟擲一個異常,而通過異常的 stacktrace 就可以看出來是哪裡的錯誤了

        public static IServiceCollection AddAliyunService(this IServiceCollection serviceCollection, Action<AliyunServiceOption> configAction)
        {
            if (configAction != null)
            {
                serviceCollection.Configure(configAction);
            }
            serviceCollection.PostConfigure<AliyunServiceOption>(options =>
            {
                if (string.IsNullOrWhiteSpace(options.AccessKeyId))
                {
                    throw new ArgumentNullException(nameof(options.AccessKeyId), $"{nameof(AliyunServiceOption)} {nameof(options.AccessKeyId)} can not be null or empty");
                }
                if (string.IsNullOrWhiteSpace(options.AccessKeySecret))
                {
                    throw new ArgumentNullException(nameof(options.AccessKeySecret), $"{nameof(AliyunServiceOption)} {nameof(options.AccessKeySecret)} can not be null or empty");
                }
            });
            serviceCollection.TryAddSingleton<IAliyunService, AliyunService>();
            return serviceCollection;
        }

在 Reference 中給出了一些其他的實現方式,可以參考,在此不做詳細介紹。

.net core 3.0 會微軟會給出一個更好的驗證方式,詳見 Options Validation: support eager validation

Reference

相關文章