WF4RC, действие WriteLine бросает ошибку на StringWriter, присвоенный TextWriter

в новинку для 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);
}

и встреченный

Метод тестирования SomeTests. SomeTests. TestMethod выдал исключение: Система. Операции. InvalidWorkflowException: со следующими ошибками встретились при обработке дерева рабочего процесса: 'Литерал': Литерал только поддерживает типы значения и неизменную систему типов. Строка. Система типов. IO.TextWriter не может использоваться в качестве литерала.

Вводя по абсолютному адресу вокруг, я нашел эту статью, описывающую, что, кажется, ошибка, которую я вижу выше.

Будучи плохо знакомым с WF, я действительно не понимаю изменения или предписанного метода для работы вокруг этого. Так, мой вопрос,

С WF4RC, как каждый [правильно] использует WriteLine действие?

5
задан johnny g 3 January 2012 в 15:15
поделиться

1 ответ

Ack, k, поэтому мысленное примечание: попробуйте все варианты поиска Google. Нашел это после поиска

WriteLine activity WF RC

Решение состоит в том, чтобы обернуть его в LambdaValue , примерно

[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 ());
}

, что мне кажется странным , но я буквально противоположность «эксперту»: P

Я все равно приветствую альтернативы, если они есть у кого-нибудь.

8
ответ дан 14 December 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: