2011-05-13 68 views
1

我正在創建一個Windows 7移動版Silverlight項目。我使用Rest api進行身份驗證,使用類別身份驗證。我得到一個身份驗證令牌作爲響應,並將其分配給一個類屬性AuthToken,因爲我需要在不同的地方使用它。有什麼方法可以在會話或其他任何事情中存儲此AuthToken。因爲我沒有在wp7中找到任何會話示例。謝謝Windows Phone 7使用會話的Silverlight

回答

2

您沒有找到任何會話示例,因爲據我所知,WP7沒有會話。您應該可以使用獨立存儲來保持您的AuthToken。但請記住,它會在一段時間後過期,就像您期望會議一樣。

示例請參見以下或谷歌搜索獨立存儲: http://www.windowsphonegeek.com/tips/all-about-wp7-isolated-storage-store-data-in-isolatedstoragesettings

希望它能幫助。我沒有做過大量的WP7開發,但我對Silverlight很熟悉。

+0

我使用上述碼。但是當我在任何其他類中獲取此值時,它不會加載保存的值 – 2011-05-13 13:54:38

1

假設你只是想對當前應用程序實例的生命週期:

最簡單的答案是,它存儲爲靜態屬性,而不是一個實例的屬性。

簡單的答案是將它作爲你的Application類(App.xaml.cs)的一個屬性來存儲。然後你可以在任何地方使用((App)(Application.Current))來訪問它。令牌

不太簡單但可能更好的答案是將其存儲在ViewModel屬性中,然後可以通過ViewModel定位器訪問 - 以MVVM Light爲例。

在所有這些情況下,您需要考慮墓碑,如果用戶點擊「開始」然後點擊「後退」(例如)來恢復它。

5

如果你想臨時會話存儲(包括當用戶使用後退按鈕返回到你的應用程序的應用程序的生活),那麼你可以使用電話狀態。電話狀態與ASP.NET中的會話狀態類似。它只是一個帶有字符串鍵的(可序列化的)對象的字典,並不會在您的應用程序啓動時保留,但當您的應用程序從Back Stack導航到時,它會被恢復。

下面是一個例子的它的使用恢復一些名爲myObject的自定義對象:

private CustomObject myObject; 

protected override void OnNavigatedFrom(NavigationEventArgs args) 
{ 
    //Save to State when leaving the page 
    PhoneApplicationService.Current.State["myObject"] = myObject; 
    base.OnNavigatedFrom(args); 
} 

protected override void OnNavigatedTo(NavigationEventArgs args) 
{ 
    if (PhoneApplicationService.Current.State.ContainsKey("myObject")) 
    { 
     //Restore from State 
     myObject = (CustomObject)PhoneApplicationService.Current.State["myObject"]; 
    } 
    else 
    { 
     //No previous object, so perform initialization 
     myObject = new myObject(); 
    } 
} 

如果你需要存儲的設置在您的應用程序的所有實例,然後看看IsolatedStorageSettings這是爲這個完美的。根據您的需要還有其他選項(Charles Petzold has a free eBook with some great examples)。


不確定爲什麼上面的代碼不適合你,但另一種選擇是使用使用IsolatedStorageSettings保存的應用程序屬性。這裏有一個例子:

在你App.xaml.cs:

public bool VibrationOn { get; set; } 

    private void Application_Launching(object sender, LaunchingEventArgs e) 
    { 
     LoadSettings(); 
    } 

    private void Application_Activated(object sender, ActivatedEventArgs e) 
    { 
     LoadSettings(); 
    } 

    private void Application_Deactivated(object sender, DeactivatedEventArgs e) 
    { 
     SaveSettings(); 
    } 

    private void Application_Closing(object sender, ClosingEventArgs e) 
    { 
     SaveSettings(); 
    } 

    private void LoadSettings() 
    { 
     IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; 

     bool vo; 
     if (settings.TryGetValue<bool>("VibrationOn", out vo)) 
      VibrationOn = vo; 
     else 
      VibrationOn = true; 
    } 

    private void SaveSettings() 
    { 
     IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; 
     settings["VibrationOn"] = VibrationOn; 
    } 

然後,您可以通過使用此代碼在任何地方訪問應用程序中的這個屬性:

if (Application.Current.VibrationOn) 
    { 
     VibrateController.Default.Start(TimeSpan.FromMilliseconds(200)); 
    } 
+0

我正在使用上面的代碼。但是當我在任何其他類中獲得此值時,它不會加載保存的值。它只適用於當我使用斷點 – 2011-05-13 13:54:28

+0

@Muhammad Zeeshan不知道爲什麼頁面狀態不適合你。對我來說,在我使用它的有限方式中這很好。我已經更新了我的答案,並且您可能會發現更適合您的情況的其他例子。如果您需要值過期,您還可以存儲日期時間對象,並在'LoadSettings'方法中檢查它。另一種選擇是在應用程序打開/關閉事件中不調用'LoadSettings' /'SaveSettings'方法,以便在重新啓動應用程序時將這些值恢復爲默認值(但將它們保留在後面狀態) – theChrisKent 2011-05-13 14:08:42

+0

非常感謝作爲迴應。我使用schummbo的答案。它適用於我的情況。我已經投票給你了。 :) – 2011-05-13 15:12:15

相關問題