WF4RC,WriteLine活动在分配给TextWriter的StringWriter上抛出错误

joh*_*y g 5 .net c# workflow-foundation-4

我是Windows Workflow [WF]的新手,并且有兴趣为业务目的评估WF.我决定通过介绍

[TestMethod]
public void TestMethod ()
{
    TextWriter writer = new StringWriter ();
    Sequence sequence = new Sequence
    {
        Activities =
        {
            // so, assigning a reference type [eg StringWriter]
            // as target is prohibited in WF4RC. what or how do
            // i assign a target? introduction cited above may
            // not be current [ie may be Beta2, not RC] so ... ?
            new WriteLine { Text = "Hello", TextWriter = writer },
            new WriteLine { Text = "World", TextWriter = writer }
        }
    };
    // !!! BLOWS UP !!!
    WorkflowInvoker.Invoke (sequence);
}
Run Code Online (Sandbox Code Playgroud)

并遇到了

测试方法SomeTests.SomeTests.TestMethod抛出异常:System.Activities.InvalidWorkflowException:处理工作流树时遇到以下错误:'Literal':Literal仅支持值类型和不可变类型System.String.System.IO.TextWriter类型不能用作文字.

四处寻找,我发现这篇文章描述了我上面看到的错误.

作为WF的新手,我真的不明白改变或规定的方法来解决它.所以,我的问题是,

使用WF4RC,一个[正确]如何使用WriteLine活动?

joh*_*y g 8

Ack,k,所以请注意:尝试Google搜索的所有排列.找到后找到了这个

WriteLine活动WF RC

解决的办法是把它包在一个LambdaValue<T>,COMME CA

[TestMethod]
public void TestMethod ()
{
    StringWriter writer = new StringWriter ();
    Sequence sequence = new Sequence
    {
        Activities =
        {
            new WriteLine 
            {
                Text = "Hello", 
                TextWriter = new LambdaValue<TextWriter> (n => writer) 
            },
            new WriteLine 
            {
                Text = "World", 
                TextWriter = new LambdaValue<TextWriter> (n => writer) 
            }
        }
    };
    WorkflowInvoker.Invoke (sequence);
    Assert.
        AreEqual (
        "Hello\r\nWorld\r\n", 
        writer.GetStringBuilder ().ToString ());
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很奇怪,但我确实与"专家"相反:P

如果有人拥有它们,我仍然会欢迎替代品.