일부 장기 실행 데이터 처리를 처리하고 수시로 "어머니"활동으로 정보를 다시 보내는 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 코드 :
IWorkflowInstanceExtension은 하나의 내선 번호 하나에 워크 플로우 관련 있지만, 각 활동에 도움이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;
}
}
좋은 생각, 모리스 :
그래서 코드는 다음과 같을 것이다. 확장 팩토리를 구현하고 문제를 제거합니다. 고맙습니다 ! –