ContractAdapter.cs source code in C# .NET

Source code for the .NET framework in C#



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

                            // ==++== 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// ==--== 
** Class:  ContractAdapter 
using System;
using System.Collections.Generic;
using System.Globalization;
using System.AddIn.Contract; 
using System.AddIn;
using System.Security; 
using System.Security.Permissions; 
using System.AddIn.Hosting;
using System.Reflection; 
using System.AddIn.MiniReflection;
using System.Diagnostics.Contracts;

namespace System.AddIn.Pipeline 
    public static class ContractAdapter 
        public static ContractHandle ViewToContractAdapter(Object view)
            if (view == null)
                throw new ArgumentNullException("view");
            AddInController controller = AddInController.GetAddInController(view); 
            if (controller != null)
                return new ContractHandle(controller.AddInControllerImpl.GetContract()); 
            return null;

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Justification = "Factory Method")] 
        public static TView ContractToViewAdapter(ContractHandle contract, PipelineStoreLocation location)
            if (location != PipelineStoreLocation.ApplicationBase) 
                throw new ArgumentException(Res.InvalidPipelineStoreLocation, "location");

            String appBase = AddInStore.GetAppBase();
            return ContractToViewAdapterImpl(contract, appBase, false);

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Justification = "Factory Method")] 
        public static TView ContractToViewAdapter(ContractHandle contract, string pipelineRoot) 
            return ContractToViewAdapterImpl(contract, pipelineRoot, true); 

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability","CA2004:RemoveCallsToGCKeepAlive", Justification="The message is about SafeHandles")]
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Justification="Factory Method")] 
        private static TView ContractToViewAdapterImpl(ContractHandle contract, String pipelineRoot, bool demand) 
            if (contract == null)
                throw new ArgumentNullException("contract"); 
            if (pipelineRoot == null)
                throw new ArgumentNullException("pipelineRoot");
            if (String.IsNullOrEmpty(pipelineRoot))
                throw new ArgumentException(Res.PathCantBeEmpty); 
            if (demand) 
                new FileIOPermission(FileIOPermissionAccess.Read, pipelineRoot).Demand();
            Type havType = typeof(TView);
            TypeInfo havTypeInfo = new TypeInfo(havType);

            List partialTokens = AddInStore.GetPartialTokens(pipelineRoot); 
            foreach (PartialToken partialToken in partialTokens)
                if (AddInStore.Contains(partialToken.HostAdapter.HostAddinViews, havTypeInfo)) 
                    partialToken.PipelineRootDirectory = pipelineRoot; 

                    //Ask for something that can implement the contract in this partial token.  The result will
                    //either be null, the addin adapter itself, or another addin adapter
                    IContract subcontract = contract.Contract.QueryContract(partialToken._contract.TypeInfo.AssemblyQualifiedName); 
                    if (subcontract != null)
                        //Instantiate the adapter and pass in the addin to its constructor 
                        TView hav = AddInActivator.ActivateHostAdapter(partialToken, subcontract);
                        return hav; 
            // Don't let the ref count go to zero too soon, before we increment it in ActivateHostAdapter
            // This is important when QueryContract returns the addIn adapter itself.  A GC at that point 
            // may collect the ContractHandle and decrement the ref count to zero before we have a chance to increment it 
            // return null.  Compiler makes us return default(TView), which will be null
            return default(TView);

// 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