0

我正在WF 4.0項目中工作。這是我自己的自定義活動的一部分:WF 4中的模型項目

public Activity Create(DependencyObject target) 
{ 
     var sequenceModelItem = (target as WorkflowViewElement).ModelItem; 
     sequenceModelItem 
      .Properties["Variables"] 
      .Collection 
      .Add(new Variable<List<string>>("Provider", provider)); 

     sequenceModelItem 
      .Properties["Variables"] 
      .Collection 
      .Add(new Variable<string>("ProviderSearch")); 

     return new Sequence 
     { 
      Activities = 
     { 
      // Some activities... 
     } 
     }; 
    } 

所以這裏是個問題。在提供者中,我有一個列表<字符串>我在我的數據庫中有一些提供者。在SequenceModelItem中,我創建了一個具有相同類型的變量,並將列表提供程序關聯到那裏。一切都是正確的,但是當我部署的工作流程和執行,以下錯誤appeare:「文字<名單<字符串>>」:在處理工作流樹時遇到

* 以下錯誤文字僅支持值類型和不可變類型System.String。該類型System.Collections.Generic.List`1 [System.String]不能用作文字*

爲了確保該錯誤是在這裏:

.Add(new Variable<List<string>>("Provider", provider)); 

但我不知道是什麼我必須要解決它,

謝謝!!

+0

對於將來的參考,如果在代碼塊中沒有使用''',它將被剝離。您可以使用標準轉義替代'<' – Will 2012-03-19 21:25:59

回答

0

難道說你需要該行更改爲:

.Add(new Variable<Dictionary<string, object>>({ "Provider", provider })); 

基於this article由羅恩·雅各布斯,看來新的變量試圖您的列表轉換爲文字這將失敗引用類型(List)。文章指出,如果你想使用引用類型,你必須使用一個字典。

+0

嗨ShelbyZ。當我這樣做時,執行時間出現錯誤。編譯器錯誤遇到處理表達式「(Collection)」。 '集合'沒有聲明。由於其保護級別,可能無法訪問 – 2012-03-20 11:16:48

0

可以實例使用Lambda

new Variable<List<string>>("Provider", context => provider) 

,但我不知道這是你想要的活動模板廠的創建方法在做什麼。這個方法將在設計時從你的設計師那裏調用,但是提供者肯定是一個運行時問題。你不應該在運行時使用某些東西去獲取提供者嗎?

+0

我嘗試將構造函數的活動方法中的查詢結果保存在列表中。之後,在create方法中,我創建一個名稱與Provider類型相同的變量(列表),並複製Provider中的前一個列表提供程序。 – 2012-03-20 11:01:55

+0

您的活動實際上看起來像一個活動模板。在活動模板中,您只能提供一部分工作流程的結構而不是實際的代碼。爲此,您將需要實現從數據庫中獲取字符串列表的CodeActivity/AsyncCodeActivity/NativeActivity。 – 2012-03-20 19:30:31

+0

我可以做SimpleNativeActivity:同一個類中的NativeActivity,IActivityTemplateFactory不是嗎? – 2012-03-21 09:16:16