2011-03-09 38 views
0

我的請求是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的完成方式不同,因爲我不是在視圖中訪問服務,而是從視圖模型訪問服務。

回答

0

問題是Blend不能執行所有的代碼。爲了檢查這一點,你可以附加一個調試器(從Visual Studio 10到Blend 4,確保你選擇託管代碼V4.0),並在你的設置代碼中放置一個斷點。可能它不會被調用。

要解決這個問題,您可以嘗試在ViewModelLocator中進行設置。由於VML是在App.xaml資源中創建的,因此Blend正在運行該代碼。例如,您可以將設置代碼放入靜態VML構造函數中。

乾杯, 洛朗

+0

我能得到它的工作通過改變方式的ServiceContainer作品。之前,當它只被調用一次時,不需要檢查它是否已經運行,我現在通過LoadDesigntime服務清除它本身,如果collectionCount> 0 ...我然後將serviceloader.LoadDesigntimeservices添加到設計時調用ctor的實際viewmodel ..我也停止調用dispatcherhelper.initialize。現在似乎正在以這種方式工作。 – ecathell 2011-03-12 22:59:01