WF 4中的模型项目

时间:2012-03-19 16:53:16

标签: c# visual-studio-2010 workflow-foundation workflow-foundation-4

我在WF 4.0项目中工作。这是我自己的自定义活动的一部分:

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...
        } 
        };
    }

所以这是问题所在。在提供者中我有一个列表&lt;字符串&gt;我在我的数据库中的一些提供商。在SequenceModelItem中,我创建了一个具有相同类型的变量,并将列表提供程序关联到那里。一切都是正确的,但是当我部署工作流程并执行时,出现以下错误:

* 处理工作流树时遇到以下错误:'Literal&lt; List&lt; String&gt;&gt; ':Literal只支持值类型和不可变类型System.String。 System.Collections.Generic.List`1 [System.String]类型不能用作文字*

确定错误在这里:

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

但我不知道我要做些什么来解决它,

谢谢!

2 个答案:

答案 0 :(得分:0)

是否需要将该行更改为:

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

基于Ron Jacobs的this article,似乎新的变量正在尝试将List转换为Literal,这对于引用类型(List)会失败。文章指出,如果要使用引用类型,则必须使用词典。

答案 1 :(得分:0)

您可以使用lambda

进行实例化
new Variable<List<string>>("Provider", context => provider)

但我不确定这是你想要在活动模板工厂的Create方法中做什么。这个方法将在设计时从您的设计师处调用,但肯定提供者是运行时关注的问题。你不应该在运行时使用某些东西来获取提供者吗?