【问题标题】:model item in WF 4WF 4 中的模型项目
【发布时间】:2012-03-19 16:53:15
【问题描述】:

我正在从事一个 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...
        } 
        };
    }

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

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

确定错误就在这里:

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

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

谢谢!!

【问题讨论】:

  • 对于将来的引用,如果&amp;lt; 未在代码块中使用,它将被删除。您可以使用标准转义符 &amp;lt;

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


【解决方案1】:

可能是您需要将该行更改为:

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

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

【讨论】:

  • 你好 ShelbyZ。当我这样做时,会出现执行时间错误。编译器错误遇到处理表达式“(集合)”。 '集合' ins 未声明。由于其保护级别,它可能无法访问
【解决方案2】:

您可以使用 lambda 实例化

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

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

【讨论】:

  • 我尝试将查询结果保存在构造函数的活动方法中的 List 中。稍后,在创建方法中,我创建了一个相同类型的变量 (List),名称为 Provider,并在 Provider 中复制之前的列表提供程序。
  • 您的活动实际上看起来像一个活动模板。在活动模板中,您只能提供一部分工作流的结构,而不是实际代码。为此,您需要实现一个 CodeActivity/AsyncCodeActivity/NativeActivity,它将从数据库中获取字符串列表。
  • 我可以做 SimpleNativeActivity : NativeActivity, IActivityTemplateFactory 在同一个类不是吗?
猜你喜欢
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2012-03-25
  • 1970-01-01
相关资源
最近更新 更多