WF 4中的模型项

本文关键字:模型 WF | 更新日期: 2023-09-27 18:28:12

我在WF4.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...
        } 
        };
    }

所以问题来了。在提供者中,我有一个列表<string>中的一些提供者。在SequenceModelItem中,我创建了一个具有相同类型的变量,并将列表提供程序与之关联。一切都是正确的,但当我部署工作流并执行时,会出现以下错误:

*处理工作流树时遇到以下错误:'Literal<列表<String>>":Literal只支持值类型和不可变类型System.String。类型System.Collections.Generic.List`1[System.String]不能用作Literal*

可以肯定的是,错误就在这里:

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

但我不知道该怎么办,

谢谢!!

WF 4中的模型项

是否需要将该行更改为:

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

根据Ron Jacobs的这篇文章,新的Variable似乎正在尝试将您的List转换为Literal,这对于引用类型(List)来说将失败。文章指出,如果你想使用引用类型,你必须使用字典。

您可以使用lambda 进行实例化

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

但我不确定这是否是您想要在活动模板工厂的Create方法中执行的操作。这个方法将在设计时从您的设计器调用,但提供者肯定是运行时的问题。难道你不应该在运行时使用一些东西来获取提供程序吗?