我在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));
但我不知道我要做些什么来解决它,
谢谢!
答案 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方法中做什么。这个方法将在设计时从您的设计师处调用,但肯定提供者是运行时关注的问题。你不应该在运行时使用某些东西来获取提供者吗?