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
- UserMapPath.cs
- ArrayExtension.cs
- XmlExtensionFunction.cs
- CodeCastExpression.cs
- DataServiceQueryOfT.cs
- TableAdapterManagerGenerator.cs
- BmpBitmapEncoder.cs
- DiscoveryDocument.cs
- _LocalDataStore.cs
- MenuItemBinding.cs
- DataGridToolTip.cs
- AmbientLight.cs
- TemplateControlCodeDomTreeGenerator.cs
- CultureInfo.cs
- ReflectionPermission.cs
- _NTAuthentication.cs
- EventMap.cs
- ContentType.cs
- PenThreadWorker.cs
- ExceptionUtil.cs
- Rules.cs
- FlowDocumentView.cs
- EventDescriptor.cs
- TimeSpanStorage.cs
- FontStyle.cs
- ProfessionalColors.cs
- PersonalizationStateInfoCollection.cs
- DragDrop.cs
- ClientSettings.cs
- ManagedWndProcTracker.cs
- NumericPagerField.cs
- SizeConverter.cs
- URI.cs
- SimpleBitVector32.cs
- DataListItemEventArgs.cs
- DictionaryMarkupSerializer.cs
- SecurityCriticalDataForSet.cs
- ACL.cs
- SqlMethodTransformer.cs
- CounterSet.cs
- PathStreamGeometryContext.cs
- ObjectHelper.cs
- CodeEntryPointMethod.cs
- NetCodeGroup.cs
- GetWinFXPath.cs
- UInt64.cs
- HttpClientCertificate.cs
- WebServiceTypeData.cs
- DetailsViewPageEventArgs.cs
- OutputCacheSettings.cs
- AppendHelper.cs
- ApplicationHost.cs
- ParameterCollection.cs
- Sentence.cs
- RuntimeConfigLKG.cs
- AdjustableArrowCap.cs
- ConnectionPoint.cs
- Light.cs
- ToolStripComboBox.cs
- DataPagerFieldCollection.cs
- SafeUserTokenHandle.cs
- QueueProcessor.cs
- AvtEvent.cs
- TypeName.cs
- HitTestWithPointDrawingContextWalker.cs
- Brush.cs
- listitem.cs
- OptimalTextSource.cs
- ContentAlignmentEditor.cs
- CryptoProvider.cs
- DbConnectionPoolCounters.cs
- FixedSchema.cs
- CheckBox.cs
- ObjectDataSourceDisposingEventArgs.cs
- ToolboxService.cs
- DataGridViewRowCollection.cs
- WinInetCache.cs
- WebPermission.cs
- SerializationInfoEnumerator.cs
- DecimalAnimationUsingKeyFrames.cs
- ECDiffieHellmanPublicKey.cs
- DocumentCollection.cs
- Util.cs
- ParameterToken.cs
- DescendentsWalkerBase.cs
- ModuleBuilder.cs
- XmlSerializerVersionAttribute.cs
- UnsignedPublishLicense.cs
- FlowDecisionLabelFeature.cs
- VectorCollectionValueSerializer.cs
- QilGenerator.cs
- ScriptBehaviorDescriptor.cs
- Transform.cs
- StrokeCollectionConverter.cs
- FragmentQueryProcessor.cs
- PeerTransportSecurityElement.cs
- UshortList2.cs
- TransformFinalBlockRequest.cs
- CompositeFontInfo.cs
- XmlQualifiedName.cs