我的請求是similar to this。在Silverlight 4中以設計模式訪問模擬服務
我正在使用MvvmLight,並且Viewmodel信息適合於設計時和運行時顯示。但是我想把它抽象成一個Service類。所以我有我的模擬服務和實現IService的真正服務。
在app.xaml的代碼隱藏中我正在檢查designtime,然後根據檢查返回的內容調用我的serviceloader上的方法。
if (IsInDesignModeStatic)
{
ServiceLoader.LoadDesignTimeServices();
}
else
{
ServiceLoader.LoadRunTimeServices();
}
public sealed class ServiceLoader
{
private ServiceLoader()
{
}
public static void LoadDesignTimeServices()
{
ServiceContainer.Instance.AddService<IQuestionsService>(new dt.QuestionsService());
}
public static void LoadRunTimeServices()
{
ServiceContainer.Instance.AddService<IQuestionsService>(new rt.QuestionsService());
}
}
這在運行時工作得很好,但不是在設計時。如果我真的在我的視圖模型中使用designtime具體實現:
if (IsInDesignMode)
{
//var s = Infrastructure.GetService<IQuestionsService>();
var s = new ReadmissionTrackingApplication.Client.Services.DesignTime.QuestionsService();
QuestionCollectionView_Refresh(s.getQuestions());
}
else
{
//Listens for New Questionairre request. It receives the current ReadmitPatientResult
Messenger.Default.Register<fnReadmitPatientList_Result>(this, ReceiveNewQuestionairreRequest);
//TODO for testing only
ReceiveNewQuestionairreRequest(null);
}
它在Blend中顯示。我需要做什麼才能在混合中訪問模擬服務?我想我記得閱讀我必須以某種方式將serviceloader添加到我的應用程序資源中,類似於對viewmodels所做的操作......但我不知道如何完成它,我認爲它與vm的完成方式不同,因爲我不是在視圖中訪問服務,而是從視圖模型訪問服務。
我能得到它的工作通過改變方式的ServiceContainer作品。之前,當它只被調用一次時,不需要檢查它是否已經運行,我現在通過LoadDesigntime服務清除它本身,如果collectionCount> 0 ...我然後將serviceloader.LoadDesigntimeservices添加到設計時調用ctor的實際viewmodel ..我也停止調用dispatcherhelper.initialize。現在似乎正在以這種方式工作。 – ecathell 2011-03-12 22:59:01