Code:
/ 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"); System.Diagnostics.Contracts.Contract.EndContractBlock(); 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"); System.Diagnostics.Contracts.Contract.EndContractBlock(); 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")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security","CA2103:ReviewImperativeSecurity")] 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); System.Diagnostics.Contracts.Contract.EndContractBlock(); 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 System.GC.KeepAlive(contract); // 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
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SplitContainer.cs
- AutomationElement.cs
- _Rfc2616CacheValidators.cs
- NamespaceCollection.cs
- SourceChangedEventArgs.cs
- RoleGroup.cs
- TextOutput.cs
- DescriptionAttribute.cs
- Point.cs
- SchemaRegistration.cs
- GridViewDeletedEventArgs.cs
- Ports.cs
- DataReaderContainer.cs
- TextViewSelectionProcessor.cs
- BamlVersionHeader.cs
- Keywords.cs
- SqlExpander.cs
- XPathNodeInfoAtom.cs
- AttributeSetAction.cs
- RegexReplacement.cs
- WizardSideBarListControlItemEventArgs.cs
- TypeName.cs
- SynchronizationContext.cs
- TextEffect.cs
- HostingEnvironment.cs
- DirtyTextRange.cs
- httpserverutility.cs
- AssemblyCollection.cs
- PartitionResolver.cs
- FileDialog_Vista.cs
- ClassDataContract.cs
- ZipQueryOperator.cs
- TextRenderer.cs
- Publisher.cs
- BamlBinaryReader.cs
- mansign.cs
- ExtendedPropertyCollection.cs
- SerializerWriterEventHandlers.cs
- EntityTransaction.cs
- UnionCodeGroup.cs
- StateFinalizationActivity.cs
- WrappedKeySecurityTokenParameters.cs
- UInt64Storage.cs
- CompensatableSequenceActivity.cs
- DataServiceKeyAttribute.cs
- MarkupWriter.cs
- WebPartConnectionsEventArgs.cs
- AsyncOperation.cs
- Assembly.cs
- IntellisenseTextBox.cs
- PhysicalAddress.cs
- UrlPath.cs
- UnsafeCollabNativeMethods.cs
- ProfilePropertySettingsCollection.cs
- ProgressBar.cs
- ComplexPropertyEntry.cs
- PagesSection.cs
- MetadataArtifactLoaderFile.cs
- PeerMessageDispatcher.cs
- SpecialNameAttribute.cs
- Queue.cs
- DataGridViewTextBoxEditingControl.cs
- FixUp.cs
- TreeView.cs
- SqlConnectionStringBuilder.cs
- PathSegment.cs
- TabRenderer.cs
- NameScope.cs
- UserControl.cs
- XsdBuildProvider.cs
- CorrelationHandle.cs
- ThreadSafeList.cs
- UnsafeNativeMethods.cs
- ContentElement.cs
- DataKeyCollection.cs
- ToolStripItemEventArgs.cs
- SqlComparer.cs
- ZipFileInfoCollection.cs
- TextSegment.cs
- TableProvider.cs
- ContainerFilterService.cs
- _ListenerRequestStream.cs
- ListControl.cs
- safex509handles.cs
- NegotiateStream.cs
- IncrementalHitTester.cs
- DPTypeDescriptorContext.cs
- OutputCacheSettingsSection.cs
- CodeTypeMemberCollection.cs
- DispatchWrapper.cs
- ManualResetEvent.cs
- RegisteredArrayDeclaration.cs
- MediaContextNotificationWindow.cs
- DSASignatureDeformatter.cs
- FrameworkElementAutomationPeer.cs
- TextElementCollection.cs
- AssemblyAttributes.cs
- RemoteArgument.cs
- ProfilePropertyMetadata.cs
- IntSecurity.cs