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));
但我不知道该怎么办,
谢谢!!
是否需要将该行更改为:
.Add(new Variable<Dictionary<string, object>>( { "Provider", provider }));
根据Ron Jacobs的这篇文章,新的Variable似乎正在尝试将您的List转换为Literal,这对于引用类型(List)来说将失败。文章指出,如果你想使用引用类型,你必须使用字典。
您可以使用lambda 进行实例化
new Variable<List<string>>("Provider", context => provider)
但我不确定这是否是您想要在活动模板工厂的Create方法中执行的操作。这个方法将在设计时从您的设计器调用,但提供者肯定是运行时的问题。难道你不应该在运行时使用一些东西来获取提供程序吗?