File: system\activationarguments.cs
Project: ndp\clr\src\bcl\mscorlib.csproj (mscorlib)
// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
 
using System.Diagnostics.Contracts;
using System.Runtime.Versioning;
using System.Security.Policy;
 
namespace System.Runtime.Hosting {
    [Serializable]
    [System.Runtime.InteropServices.ComVisible(true)]
    public sealed class ActivationArguments : EvidenceBase {
        private ActivationArguments () {}
 
        // This boolean is used to smuggle the information about whether
        // AppDomainSetup was constructed from an ActivationContext.
        private bool m_useFusionActivationContext = false;
        internal bool UseFusionActivationContext {
            get {
                return m_useFusionActivationContext;
            }
        }
 
        // This is used to indicate whether the instance is to be activated
        // during the new domain's initialization. CreateInstanceHelper sets
        // this flag to true; CreateDomainHelper never activates the application.
        private bool m_activateInstance = false;
        internal bool ActivateInstance {
            get {
                return m_activateInstance;
            }
            set {
                m_activateInstance = value;
            }
        }
 
        private string m_appFullName;
        internal string ApplicationFullName {
            get {
                return m_appFullName;
            }
        }
 
        private string[] m_appManifestPaths;
        internal string[] ApplicationManifestPaths {
            get {
                return m_appManifestPaths;
            }
        }
 
#if !FEATURE_PAL
        public ActivationArguments (ApplicationIdentity applicationIdentity) : this (applicationIdentity, null) {}
        public ActivationArguments (ApplicationIdentity applicationIdentity, string[] activationData) {
            if (applicationIdentity == null)
                throw new ArgumentNullException("applicationIdentity");
            Contract.EndContractBlock();
 
            m_appFullName = applicationIdentity.FullName;
            m_activationData = activationData;
        }
 
        public ActivationArguments (ActivationContext activationData) : this (activationData, null) {}
        [ResourceExposure(ResourceScope.None)]
        [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
        public ActivationArguments (ActivationContext activationContext, string[] activationData) {
            if (activationContext == null)
                throw new ArgumentNullException("activationContext");
            Contract.EndContractBlock();
 
            m_appFullName = activationContext.Identity.FullName;
            m_appManifestPaths = activationContext.ManifestPaths;
            m_activationData = activationData;
            m_useFusionActivationContext = true;
        }
 
        [ResourceExposure(ResourceScope.Machine)]
        [ResourceConsumption(ResourceScope.Machine)]
        internal ActivationArguments (string appFullName, string[] appManifestPaths, string[] activationData) {
            if (appFullName == null)
                throw new ArgumentNullException("appFullName");
            Contract.EndContractBlock();
 
            m_appFullName = appFullName;
            m_appManifestPaths = appManifestPaths;
            m_activationData = activationData;
            m_useFusionActivationContext = true;
        }
 
        public ApplicationIdentity ApplicationIdentity {
            get {
                return new ApplicationIdentity(m_appFullName);
            }
        }
 
        public ActivationContext ActivationContext {
            [ResourceExposure(ResourceScope.None)]
            [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
            get {
                if (!UseFusionActivationContext)
                    return null;
 
                if (m_appManifestPaths == null)
                    return new ActivationContext(new ApplicationIdentity(m_appFullName));
                else
                    return new ActivationContext(new ApplicationIdentity(m_appFullName), m_appManifestPaths);
            }
        }
#endif // !FEATURE_PAL
 
        private string[] m_activationData;
        public string[] ActivationData {
            get {
                return m_activationData;
            }
        }
 
        public override EvidenceBase Clone() {
            ActivationArguments clone = new ActivationArguments();
 
            clone.m_useFusionActivationContext = m_useFusionActivationContext;
            clone.m_activateInstance = m_activateInstance;
            clone.m_appFullName = m_appFullName;
 
            if (m_appManifestPaths != null) {
                clone.m_appManifestPaths = new string[m_appManifestPaths.Length];
                Array.Copy(m_appManifestPaths, clone.m_appManifestPaths, clone.m_appManifestPaths.Length);
            }
 
            if (m_activationData != null) {
                clone.m_activationData = new string[m_activationData.Length];
                Array.Copy(m_activationData, clone.m_activationData, clone.m_activationData.Length);
            }
 
#if !FEATURE_PAL
            clone.m_activateInstance = m_activateInstance;
            clone.m_appFullName = m_appFullName;
            clone.m_useFusionActivationContext = m_useFusionActivationContext;
#endif // !FEATURE_PAL
 
            return clone;
        }
    }
}