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
- HttpCachePolicyElement.cs
- DetailsViewInsertedEventArgs.cs
- DataServiceEntityAttribute.cs
- codemethodreferenceexpression.cs
- VirtualPathProvider.cs
- DbConnectionOptions.cs
- WebPartZoneBase.cs
- SpeechDetectedEventArgs.cs
- XmlSchemaSubstitutionGroup.cs
- EncodedStreamFactory.cs
- AttributeData.cs
- TreeNodeCollection.cs
- AutomationEvent.cs
- OleAutBinder.cs
- KnownAssembliesSet.cs
- VirtualPath.cs
- CLRBindingWorker.cs
- WorkflowInstanceTerminatedRecord.cs
- PropertyConverter.cs
- DataTransferEventArgs.cs
- Vector3DCollectionConverter.cs
- SqlTypeConverter.cs
- NumberFormatter.cs
- FontStretches.cs
- MemberRelationshipService.cs
- GeometryModel3D.cs
- ListControl.cs
- EntityChangedParams.cs
- TreeNodeEventArgs.cs
- Operators.cs
- SessionIDManager.cs
- HtmlControl.cs
- OptionUsage.cs
- LowerCaseStringConverter.cs
- DataErrorValidationRule.cs
- TextTreeInsertElementUndoUnit.cs
- StringConcat.cs
- JsonDataContract.cs
- ContextQuery.cs
- ContentPlaceHolder.cs
- MediaElementAutomationPeer.cs
- SHA512.cs
- PlainXmlWriter.cs
- MachineSettingsSection.cs
- ToolStripSystemRenderer.cs
- ViewStateException.cs
- FormattedText.cs
- TraversalRequest.cs
- ContractSearchPattern.cs
- Message.cs
- UnknownBitmapEncoder.cs
- X500Name.cs
- MetadataSource.cs
- SchemaTableOptionalColumn.cs
- CancellationTokenRegistration.cs
- VisualTransition.cs
- SiteMapDataSource.cs
- RewritingValidator.cs
- ResXResourceSet.cs
- MouseEventArgs.cs
- OpCodes.cs
- StrokeNodeData.cs
- shaperfactoryquerycacheentry.cs
- StringStorage.cs
- ScriptResourceDefinition.cs
- CodeVariableReferenceExpression.cs
- WindowVisualStateTracker.cs
- CodeObject.cs
- TextPointer.cs
- CharKeyFrameCollection.cs
- EntityKeyElement.cs
- EFTableProvider.cs
- RuleAttributes.cs
- PerformanceCounterLib.cs
- ColorConverter.cs
- EntityClientCacheKey.cs
- Int16Animation.cs
- Enum.cs
- PersonalizablePropertyEntry.cs
- SqlWebEventProvider.cs
- PreservationFileReader.cs
- WindowsImpersonationContext.cs
- ListItemConverter.cs
- OdbcConnectionString.cs
- TableCellsCollectionEditor.cs
- RunClient.cs
- OpenFileDialog.cs
- Parameter.cs
- InlineObject.cs
- BackStopAuthenticationModule.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- JsonDeserializer.cs
- EtwTrace.cs
- ITreeGenerator.cs
- SafeThemeHandle.cs
- TcpConnectionPoolSettingsElement.cs
- CustomCredentialPolicy.cs
- DefaultExpressionVisitor.cs
- DbParameterCollection.cs
- PathSegment.cs