.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