У меня есть приложение SL4, которое использует MVVM Light Toolkit.В рамках модели представления я вызываю службу данных, которая извлекает данные из службы OData.В виртуальной машине я использую служебный класс DispatcherHelper (часть MVVM Light) для обновления свойства виртуальной машины из данных обратного вызова, которые я передаю в службу данных.Например, мой метод модели представления выглядит следующим образом:
public string CurrentUserLogin {
get {
if (string.IsNullOrEmpty(_currentUserLogin))
RetrieveCurrentUserLogin();
return string.IsNullOrEmpty(_currentUserLogin) ? _currentUserLogin : _currentUserLogin.Replace(@"\\", @"\");
}
set {
if (_currentUserLogin != value) {
_currentUserLogin = value;
RaisePropertyChanged(CurrentUserLoginPropertyName);
}
}
}
private void RetrieveCurrentUserLogin() {
DataService.GetCurrentUserLogin(result => {
DispatcherHelper.UIDispatcher.BeginInvoke(() => {
CurrentUserLogin = result;
});
});
}
И вот как выглядит моя служба данных:
public void GetCurrentUserLogin(Action<string> callback) {
// create query request
var query = OnDemandContext.CreateQuery<string>("GetCurrentUserLogin");
var request = (HttpWebRequest)WebRequest.Create(query.RequestUri);
request.BeginGetResponse(asyncResult => {
var responseStream = request.EndGetResponse(asyncResult).GetResponseStream();
var responseDocument = XDocument.Load(responseStream);
callback(responseDocument.Root.Value);
}, null);
}
Все отлично работает, когда я запускаю свое приложение SL.Однако у меня возникает проблема, когда я пытаюсь написать модульные тесты с использованием SL Unit Testing Framework.Я могу проверить свою службу данных без проблем, но кажется, что DispatcherHelper бросает гаечный ключ во все мои тесты, так как DispatcherHelper.UIDispatcher всегда имеет значение null при запуске.Я предполагаю, что это как-то связано с инициализацией (которая находится в Application_Startup () моего SL-приложения.Я попытался инициализировать его в моем тестовом приложении, но это не помогает.Я также пытался использовать DispatcherHelper.CheckBeginInvokeOnUI (), но это не влияет на проблему.
Идеи?