ContractHandle.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / AddIn / AddIn / System / Addin / Pipeline / ContractHandle.cs / 1305376 / ContractHandle.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 
/*============================================================
** 
** Class:  ContractHandle 
**
** Purpose: 
**
===========================================================*/
using System;
using System.Collections.Generic; 
using System.Diagnostics;
using System.Globalization; 
using System.AddIn.Contract; 
using System.AddIn;
using System.Runtime.Remoting.Lifetime; 
using System.Runtime.Remoting;
using System.Runtime.Serialization;
using System.Diagnostics.Contracts;
 
namespace System.AddIn.Pipeline
{ 
    ///  
    /// 
    public class ContractHandle : IDisposable 
    {
        private IContract m_contract;
        private int? m_token;
        internal const string s_appDomainOwner = "System.AddIn_Owner_Contract"; 

        public ContractHandle(IContract contract) 
        { 
            if (contract == null)
                throw new ArgumentNullException("contract"); 
            System.Diagnostics.Contracts.Contract.EndContractBlock();

            m_contract = contract;
            m_token = m_contract.AcquireLifetimeToken(); 
        }
 
        public IContract Contract 
        {
            get { return m_contract; } 
        }

        ~ContractHandle()
        { 
            Dispose(false);
        } 
 
        protected virtual void Dispose(bool disposing)
        { 
            if (disposing)
            {
                // managed cleanup would go here
            } 
            if (m_token != null)
            { 
                try 
                {
                    // See comments in AddInController for why its OK to call into the 
                    // transparentProxy from this objects Finalize member.
                    m_contract.RevokeLifetimeToken((int)m_token);
                }
                catch (AppDomainUnloadedException) { } 
                catch (RemotingException) { }
                catch (SerializationException) {} 
                finally 
                {
                    m_token = null; 
                    m_contract = null;
                }
            }
        } 

        public void Dispose() 
        { 
            Dispose(true);
            GC.SuppressFinalize(this); 
        }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming","CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId="AppDomain")]
        public static bool ContractOwnsAppDomain(IContract contract, AppDomain domain) 
        {
            if (domain == null) 
                throw new ArgumentNullException("domain"); 
            if (contract == null)
                throw new ArgumentNullException("contract"); 
            System.Diagnostics.Contracts.Contract.EndContractBlock();
            return domain.GetData(s_appDomainOwner) == contract;
        }
 
 		[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming","CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId="AppDomain")]
        public static IContract AppDomainOwner(AppDomain domain) 
        { 
            if (domain == null)
                throw new ArgumentNullException("domain"); 
            System.Diagnostics.Contracts.Contract.EndContractBlock();
            return (IContract)domain.GetData(s_appDomainOwner);
        }
    } 
}
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 
/*============================================================
** 
** Class:  ContractHandle 
**
** Purpose: 
**
===========================================================*/
using System;
using System.Collections.Generic; 
using System.Diagnostics;
using System.Globalization; 
using System.AddIn.Contract; 
using System.AddIn;
using System.Runtime.Remoting.Lifetime; 
using System.Runtime.Remoting;
using System.Runtime.Serialization;
using System.Diagnostics.Contracts;
 
namespace System.AddIn.Pipeline
{ 
    ///  
    /// 
    public class ContractHandle : IDisposable 
    {
        private IContract m_contract;
        private int? m_token;
        internal const string s_appDomainOwner = "System.AddIn_Owner_Contract"; 

        public ContractHandle(IContract contract) 
        { 
            if (contract == null)
                throw new ArgumentNullException("contract"); 
            System.Diagnostics.Contracts.Contract.EndContractBlock();

            m_contract = contract;
            m_token = m_contract.AcquireLifetimeToken(); 
        }
 
        public IContract Contract 
        {
            get { return m_contract; } 
        }

        ~ContractHandle()
        { 
            Dispose(false);
        } 
 
        protected virtual void Dispose(bool disposing)
        { 
            if (disposing)
            {
                // managed cleanup would go here
            } 
            if (m_token != null)
            { 
                try 
                {
                    // See comments in AddInController for why its OK to call into the 
                    // transparentProxy from this objects Finalize member.
                    m_contract.RevokeLifetimeToken((int)m_token);
                }
                catch (AppDomainUnloadedException) { } 
                catch (RemotingException) { }
                catch (SerializationException) {} 
                finally 
                {
                    m_token = null; 
                    m_contract = null;
                }
            }
        } 

        public void Dispose() 
        { 
            Dispose(true);
            GC.SuppressFinalize(this); 
        }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming","CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId="AppDomain")]
        public static bool ContractOwnsAppDomain(IContract contract, AppDomain domain) 
        {
            if (domain == null) 
                throw new ArgumentNullException("domain"); 
            if (contract == null)
                throw new ArgumentNullException("contract"); 
            System.Diagnostics.Contracts.Contract.EndContractBlock();
            return domain.GetData(s_appDomainOwner) == contract;
        }
 
 		[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming","CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId="AppDomain")]
        public static IContract AppDomainOwner(AppDomain domain) 
        { 
            if (domain == null)
                throw new ArgumentNullException("domain"); 
            System.Diagnostics.Contracts.Contract.EndContractBlock();
            return (IContract)domain.GetData(s_appDomainOwner);
        }
    } 
}
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK