我試圖實現一個WF4活動擴展,它處理一些長時間運行的數據處理並不時發送信息回到「母親」活動。活動 - 工作流實例擴展一對一關係
我實現了這個版本,但如果我在並行活動上下文中使用此活動,我有問題。從下面的代碼中可以看出,該活動正在創建書籤,並在它調用MyActivityExtension對象之後。 我希望MyActivity類的每個實例都有一個與MyActivityExtension不同的實例進行通信。如果在一個工作流定義中連續使用這種類型的兩個活動,那麼一切正常,並且對擴展類的調用是針對不同的對象進行的,但是如果一個活動開始執行而另一個活動處於閒置狀態,則第二個活動使用相同的擴展實例空着的一個。
下面我添加了我的代碼的簡化示例。任何想法如何在活動實例和活動擴展實例之間強加一對一的關係?
謝謝你在前進, 亞歷
MyActivity代碼:
protected override void Execute(NativeActivityContext context)
{
//Some data processing....
//Obtain the activity extension
MyActivityExtension extension = context.GetExtension<MyActivityExtension >();
string bookmarkName = "MyActivity_" + Guid.NewGuid().ToString();
var bookmark = context.CreateBookmark(bookmarkName, BookmarkResumed);
extension.ProcessData(bookmarkName);
}
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
base.CacheMetadata(metadata);
metadata.AddDefaultExtensionProvider<MyActivityExtension >(() => new MyActivityExtension());
}
private void BookmarkResumed(NativeActivityContext context, Bookmark bookmark, object value)
{
//some data retrieving operations
}
MyActivityExtension代碼:
public class MyActivityExtension : IWorkflowInstanceExtension
{
private WorkflowInstanceProxy instance;
private Guid id;
public MyActivityExtension()
{
id = Guid.NewGuid();
}
internal void ProcessData(string bookmarkName)
{
Console.WriteLine("My activity extension Id: " + id.ToString());
//Some data processing
}
public IEnumerable<object> GetAdditionalExtensions()
{
return null;
}
public void SetInstance(WorkflowInstanceProxy instance)
{
this.instance = instance;
}
}
偉大的想法,莫里斯。我實施了擴建工廠並擺脫了這個問題。謝謝 ! – 2011-04-21 11:04:21