Code:
/ 4.0 / 4.0 / 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.
// ==++==
//
// 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
- Inline.cs
- PropertyGridDesigner.cs
- oledbmetadatacolumnnames.cs
- LinkLabelLinkClickedEvent.cs
- PkcsUtils.cs
- ContentHostHelper.cs
- SafeArrayRankMismatchException.cs
- AvtEvent.cs
- SQLInt64.cs
- SelectionGlyph.cs
- DialogResultConverter.cs
- TextShapeableCharacters.cs
- FunctionImportMapping.cs
- CancellationTokenSource.cs
- QualificationDataAttribute.cs
- CompilationLock.cs
- DotExpr.cs
- RegexParser.cs
- ConfigXmlCDataSection.cs
- ToolCreatedEventArgs.cs
- OracleEncoding.cs
- SecurityElement.cs
- BrowserDefinitionCollection.cs
- SessionState.cs
- HostProtectionException.cs
- SerializationSectionGroup.cs
- MatrixUtil.cs
- ScriptIgnoreAttribute.cs
- xdrvalidator.cs
- DependencyPropertyConverter.cs
- PersonalizableAttribute.cs
- TableProviderWrapper.cs
- ShapingEngine.cs
- SqlParameter.cs
- WebSysDisplayNameAttribute.cs
- ChannelEndpointElementCollection.cs
- ProbeDuplex11AsyncResult.cs
- InstancePersistenceCommand.cs
- FunctionNode.cs
- DataSourceXmlTextReader.cs
- DataGridToolTip.cs
- FileEnumerator.cs
- TemplateBindingExpression.cs
- TaiwanCalendar.cs
- WSDualHttpSecurity.cs
- HttpHandlerActionCollection.cs
- PerformanceCounterPermission.cs
- MenuItemAutomationPeer.cs
- OperationContextScope.cs
- HtmlTable.cs
- StrongTypingException.cs
- Line.cs
- MessagingDescriptionAttribute.cs
- WebServiceResponse.cs
- ForeignKeyConstraint.cs
- MatrixKeyFrameCollection.cs
- StatusBarPanelClickEvent.cs
- AssociatedControlConverter.cs
- IdentityReference.cs
- ConsumerConnectionPoint.cs
- ResourceAssociationTypeEnd.cs
- InlineUIContainer.cs
- ObjectSet.cs
- TextSpanModifier.cs
- RectangleGeometry.cs
- WebResourceUtil.cs
- ThreadStaticAttribute.cs
- DomNameTable.cs
- InfoCardTrace.cs
- Fault.cs
- EncodingInfo.cs
- _TransmitFileOverlappedAsyncResult.cs
- OracleConnection.cs
- SqlDataSourceStatusEventArgs.cs
- EdmMember.cs
- CatalogZone.cs
- DispatcherSynchronizationContext.cs
- Stopwatch.cs
- XmlDocumentFieldSchema.cs
- FloaterBaseParagraph.cs
- Pen.cs
- FilterQueryOptionExpression.cs
- TimeoutConverter.cs
- Vector3DCollectionValueSerializer.cs
- TdsValueSetter.cs
- BamlRecordReader.cs
- XomlCompilerResults.cs
- SchemaInfo.cs
- MenuItemStyle.cs
- MemoryFailPoint.cs
- DataTableCollection.cs
- SHA1Managed.cs
- ToolStripPanel.cs
- ExceptionValidationRule.cs
- NGCPageContentSerializerAsync.cs
- PrintingPermissionAttribute.cs
- RequestCache.cs
- ClientConfigurationHost.cs
- ObjectStateManager.cs
- LocationUpdates.cs