public static TResult LoadFromConfig <TResult>(
     Func <CredentialProvider, TResult> onLoaded,
     Func <string, TResult> onConfigurationNotAvailable)
 {
     return(Web.Configuration.Settings.GetGuid(AppSettings.ClientKey,
                                               (clientKey) =>
     {
         return Web.Configuration.Settings.GetString(AppSettings.ClientSecret,
                                                     (clientSecret) =>
         {
             var provider = new CredentialProvider(clientKey, clientSecret);
             return onLoaded(provider);
         },
                                                     onConfigurationNotAvailable);
     },
                                               onConfigurationNotAvailable));
 }
 public Task <TResult> ProvideLoginProviderAsync <TResult>(
     Func <IProvideLogin, TResult> onLoaded,
     Func <string, TResult> onNotAvailable)
 {
     return(AppSettings.ClientKey.ConfigurationGuid(
                (clientKey) =>
     {
         return AppSettings.ClientSecret.ConfigurationString(
             (clientSecret) =>
         {
             var provider = new CredentialProvider(clientKey, clientSecret);
             return onLoaded(provider);
         },
             onNotAvailable);
     },
                onNotAvailable).AsTask());
 }