2011-12-20 60 views
0

我試圖在wf4中創建自定義活動。我找到了一個教程/示例,並一直在使用它開始,但我似乎有問題。上下文不可用?

public sealed class SaveRequest : NativeActivity { 
    // Define an activity input argument of type string 
    [RequiredArgument] 
    public InArgument<Request> Request { get; set; } 

    // If your activity returns a value, derive from CodeActivity<TResult> 
    // and return the value from the Execute method. 
    protected override void Execute(NativeActivityContext context) { 
     Request Request = this.Request.Get(context); 
     Request.Id = Guid.NewGuid(); 
     Request.Title = "New Test"; 
     RequestMonkeyRepository Rep = new RequestMonkeyRepository(); 
     Rep.save(Request); 
    } 
} 

上面的代碼在分配guid時總是出錯,並且出現空對象實例。我假設它是因爲我沒有將請求對象傳遞給工作流,但我無法看到他們在示例中如何做到這一點。

進出口運行一個控制檯應用程序,我的代碼執行低於

WorkflowInvoker.Invoke(new RequestMonkeyTest1.TestWorkflow()); 
+0

'請求'不是由魔法設置的。你必須將它綁定到* something *。 *某事*必須以某種方式傳遞給工作流*。 – Will 2011-12-20 15:13:25

+0

@謝謝。我不知道他們在這個例子中是如何做到這一點的,但認爲我想到了。我將一個idictionary對象傳遞給工作流。還沒有,但越來越接近 – 2011-12-20 15:46:13

+0

請注意,您已將字符串值作爲傳遞給工作流的請求對象的索引? SaveRequest.Request必須綁定到該值。字符串索引必須是在工作流的根上定義的參數的名稱,並且請求必須綁定到此參數。因此,通過名稱將實例傳遞給工作流,工作流填充參數,然後在SaveRequest執行時計算綁定並從工作流上下文中檢索Request實例。 – Will 2011-12-20 16:29:51

回答

0

你在你的工作流程設置請求InArgument一些表達式返回請求對象的實例?如果不嘗試在表達式中添加「新的請求()」並再次運行您的工作流程。

+0

psst,[我剛剛提交了一個涉及wf4的bug報告](https://connect.microsoft.com/VisualStudio/feedback/details/715057/wf-activity-validation-does-not-respect-object-oriented-principals-在-某些-情況)。如果你碰巧有時間查看和評論,我會很感激。在附件解決方案可供下載之前可能需要一段時間。 – Will 2011-12-21 19:24:01

+0

psst psst我只是想出了什麼*「組裝引用和導入命名空間的內部實現」*的意思!這意味着** hocus pocus!驗證現在可以正常工作!** – Will 2011-12-27 20:08:53

相關問題