コード例 #1
0
        public void LoadActivityTree(Activity rootActivity, System.Activities.ActivityInstance rootInstance, List <System.Activities.ActivityInstance> secondaryRootInstances, ActivityExecutor executor)
        {
            this.instanceMapping = new Dictionary <Activity, InstanceList>(this.rawDeserializedLists.Length);
            for (int i = 0; i < this.rawDeserializedLists.Length; i++)
            {
                Activity     activity;
                InstanceList list = this.rawDeserializedLists[i];
                if (!QualifiedId.TryGetElementFromRoot(rootActivity, list.ActivityId, out activity))
                {
                    throw FxTrace.Exception.AsError(new InvalidOperationException(System.Activities.SR.ActivityInstanceFixupFailed));
                }
                this.instanceMapping.Add(activity, list);
                list.Load(activity, this);
            }
            this.rawDeserializedLists = null;
            Func <System.Activities.ActivityInstance, ActivityExecutor, bool> callback = new Func <System.Activities.ActivityInstance, ActivityExecutor, bool>(this.OnActivityInstanceLoaded);

            rootInstance.FixupInstance(null, this, executor);
            ActivityUtilities.ProcessActivityInstanceTree(rootInstance, executor, callback);
            if (secondaryRootInstances != null)
            {
                foreach (System.Activities.ActivityInstance instance in secondaryRootInstances)
                {
                    instance.FixupInstance(null, this, executor);
                    ActivityUtilities.ProcessActivityInstanceTree(instance, executor, callback);
                }
            }
        }
コード例 #2
0
 public ExecutionPropertyManager(System.Activities.ActivityInstance owningInstance)
 {
     this.owningInstance = owningInstance;
     this.properties     = new Dictionary <string, ExecutionProperty>();
     if (owningInstance.HasChildren)
     {
         System.Activities.ActivityInstance previousOwner = (owningInstance.PropertyManager != null) ? owningInstance.PropertyManager.owningInstance : null;
         ActivityUtilities.ProcessActivityInstanceTree(owningInstance, null, (instance, executor) => this.AttachPropertyManager(instance, previousOwner));
     }
     else
     {
         owningInstance.PropertyManager = this;
     }
 }
コード例 #3
0
ファイル: ActivityInstanceMap.cs プロジェクト: wforney/corewf
        public void LoadActivityTree(
            Activity rootActivity,
            ActivityInstance?rootInstance,
            List <ActivityInstance> secondaryRootInstances,
            ActivityExecutor executor)
        {
            Fx.Assert(this.rawDeserializedLists != null, "We should always have deserialized some lists.");
            if (this.rawDeserializedLists == null)
            {
                throw new NullReferenceException("We should always have deserialized some lists.");
            }

            this.instanceMapping = new Dictionary <Activity, InstanceList>(this.rawDeserializedLists?.Length ?? 0);

            for (var i = 0; i < this.rawDeserializedLists.Length; i++)
            {
                var list = this.rawDeserializedLists[i];
                if (!QualifiedId.TryGetElementFromRoot(rootActivity, list.ActivityId, out var activity))
                {
                    throw FxTrace.Exception.AsError(new InvalidOperationException(SR.ActivityInstanceFixupFailed));
                }

                this.instanceMapping.Add(activity, list);
                list.Load(activity, this);
            }

            // We need to null this out once we've recreated the dictionary to avoid having out of
            // sync data
            this.rawDeserializedLists = null;

            // then walk our instance list, fixup parent references, and perform basic validation
            var processInstanceCallback = new Func <ActivityInstance, ActivityExecutor, bool>(OnActivityInstanceLoaded);

            rootInstance.FixupInstance(null, this, executor);
            ActivityUtilities.ProcessActivityInstanceTree(rootInstance, executor, processInstanceCallback);

            if (secondaryRootInstances != null)
            {
                foreach (var instance in secondaryRootInstances)
                {
                    instance.FixupInstance(null, this, executor);
                    ActivityUtilities.ProcessActivityInstanceTree(instance, executor, processInstanceCallback);
                }
            }
        }
コード例 #4
0
        public ExecutionPropertyManager(ActivityInstance owningInstance)
        {
            Fx.Assert(owningInstance != null, "null instance should be using the internal host-based ctor");
            this.owningInstance = owningInstance;

            // This object is only constructed if we know we have properties to add to it
            this.properties = new Dictionary <string, ExecutionProperty>();

            if (owningInstance.HasChildren)
            {
                var previousOwner = owningInstance.PropertyManager != null ? owningInstance.PropertyManager.owningInstance : null;

                // we're setting a handle property. Walk the children and associate the new property manager
                // then walk our instance list, fixup parent references, and perform basic validation
                ActivityUtilities.ProcessActivityInstanceTree(owningInstance, null, (instance, executor) => AttachPropertyManager(instance, previousOwner));
            }
            else
            {
                owningInstance.PropertyManager = this;
            }
        }
コード例 #5
0
        public void LoadActivityTree(Activity rootActivity, ActivityInstance rootInstance, List <ActivityInstance> secondaryRootInstances, ActivityExecutor executor)
        {
            Fx.Assert(_rawDeserializedLists != null, "We should always have deserialized some lists.");

            _instanceMapping = new Dictionary <Activity, InstanceList>(_rawDeserializedLists.Length);

            for (int i = 0; i < _rawDeserializedLists.Length; i++)
            {
                InstanceList list = _rawDeserializedLists[i];
                Activity     activity;
                if (!QualifiedId.TryGetElementFromRoot(rootActivity, list.ActivityId, out activity))
                {
                    throw Microsoft.CoreWf.Internals.FxTrace.Exception.AsError(new InvalidOperationException(SR.ActivityInstanceFixupFailed));
                }
                _instanceMapping.Add(activity, list);
                list.Load(activity, this);
            }

            // We need to null this out once we've recreated the dictionary to avoid
            // having out of sync data
            _rawDeserializedLists = null;

            // then walk our instance list, fixup parent references, and perform basic validation
            Func <ActivityInstance, ActivityExecutor, bool> processInstanceCallback = new Func <ActivityInstance, ActivityExecutor, bool>(OnActivityInstanceLoaded);

            rootInstance.FixupInstance(null, this, executor);
            ActivityUtilities.ProcessActivityInstanceTree(rootInstance, executor, processInstanceCallback);

            if (secondaryRootInstances != null)
            {
                foreach (ActivityInstance instance in secondaryRootInstances)
                {
                    instance.FixupInstance(null, this, executor);
                    ActivityUtilities.ProcessActivityInstanceTree(instance, executor, processInstanceCallback);
                }
            }
        }