//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities { using System; using System.Runtime; using System.Runtime.Serialization; [DataContract] public abstract class Handle { ActivityInstance owner; // We check uninitialized because it should be false more often bool isUninitialized; protected Handle() { this.isUninitialized = true; } public ActivityInstance Owner { get { return this.owner; } } public string ExecutionPropertyName { get { return this.GetType().FullName; } } [DataMember(EmitDefaultValue = false, Name = "owner")] internal ActivityInstance SerializedOwner { get { return this.owner; } set { this.owner = value; } } [DataMember(EmitDefaultValue = false, Name = "isUninitialized")] internal bool SerializedIsUninitialized { get { return this.isUninitialized; } set { this.isUninitialized = value; } } [DataMember(EmitDefaultValue = false)] internal bool CanBeRemovedWithExecutingChildren { get; set; } internal bool IsInitialized { get { return !this.isUninitialized; } } internal static string GetPropertyName(Type handleType) { Fx.Assert(TypeHelper.AreTypesCompatible(handleType, typeof(Handle)), "must pass in a Handle-based type here"); return handleType.FullName; } internal void Initialize(HandleInitializationContext context) { this.owner = context.OwningActivityInstance; this.isUninitialized = false; OnInitialize(context); } internal void Reinitialize(ActivityInstance owner) { this.owner = owner; } internal void Uninitialize(HandleInitializationContext context) { OnUninitialize(context); this.isUninitialized = true; } protected virtual void OnInitialize(HandleInitializationContext context) { } protected virtual void OnUninitialize(HandleInitializationContext context) { } protected void ThrowIfUninitialized() { if (this.isUninitialized) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.HandleNotInitialized)); } } } }