Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / AddIn / AddIn / System / Addin / Hosting / Store / AddInAdapter.cs / 1305376 / AddInAdapter.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: AddInAdapter ** ** Purpose: Represents an add-in adapter on disk ** ===========================================================*/ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.Reflection; using System.Text; using System.AddIn.MiniReflection; using System.Diagnostics.Contracts; namespace System.AddIn { [Serializable] internal sealed class AddInAdapter : PipelineComponent { private List_contracts; private List _constructors; public AddInAdapter(TypeInfo typeInfo, String assemblyLocation) : base(typeInfo, assemblyLocation) { _contracts = new List (); _constructors = new List (); } public List Constructors { get { return _constructors; } } public List Contracts { get { return _contracts; } } public override String ToString() { return String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterToString, Name, BestAvailableLocation); } internal override bool Validate(Type type, Collection warnings) { System.Diagnostics.Contracts.Contract.Assert(type.Assembly.ReflectionOnly && IContractInReflectionLoaderContext.Assembly.ReflectionOnly, "Both the type and IContract should be in the ReflectionOnly loader context"); if (!type.IsMarshalByRef) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterMustBeMBRO, type.AssemblyQualifiedName)); return false; } //if (!type.Implements(typeofIContract)) if (!IContractInReflectionLoaderContext.IsAssignableFrom(type)) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterMustImplementAnAddInContract, type.AssemblyQualifiedName)); return false; } foreach (Type contractInterface in type.GetInterfaces()) { //if (contractInterface.Implements(typeofIContract)) if (IContractInReflectionLoaderContext.IsAssignableFrom(contractInterface)) _contracts.Add(new TypeInfo(contractInterface)); } if (_contracts.Count == 0) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterMustImplementAnAddInContract, type.AssemblyQualifiedName)); return false; } foreach (ConstructorInfo ctor in type.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { ParameterInfo[] pars = ctor.GetParameters(); if (pars.Length != 1) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterOneUnusableConstructor, type.AssemblyQualifiedName)); continue; } _constructors.Add(new TypeInfo(pars[0].ParameterType)); } if (_constructors.Count == 0) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterNoUsableConstructors, type.AssemblyQualifiedName)); return false; } return base.Validate(type, warnings); } // Imagine a generic AddInBase (AB ), and an AddInAdapter with a // constructor taking in AB . If we have IntAddIn : AB , // then we should be able to hook this up. internal bool CanConnectTo(AddInBase addInBase) { System.Diagnostics.Contracts.Contract.Requires(addInBase != null); if (!addInBase.TypeInfo.IsGeneric) { if (this.Constructors.Contains(addInBase.TypeInfo)) return true; // return true if we have a constructor that accepts one of addinBase's ActivatableAs base classes if (addInBase._activatableAs != null) { foreach (TypeInfo activatableAsTypeInfo in addInBase._activatableAs) { if (this.Constructors.Contains(activatableAsTypeInfo)) return true; } } } else { return false; } return false; } } } // 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
- AssemblyCollection.cs
- ToolStripLabel.cs
- OrderPreservingMergeHelper.cs
- AutomationIdentifierGuids.cs
- KeysConverter.cs
- LineUtil.cs
- BitmapDownload.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- SemanticKeyElement.cs
- ContractMapping.cs
- TextElementCollectionHelper.cs
- ServiceOperation.cs
- SiteMapNodeCollection.cs
- BitmapFrame.cs
- ListBoxItemWrapperAutomationPeer.cs
- Frame.cs
- EventLogPermission.cs
- HttpWebResponse.cs
- ObjectViewListener.cs
- BypassElement.cs
- PropertyNames.cs
- UserControl.cs
- Rights.cs
- MergeFailedEvent.cs
- DecoderBestFitFallback.cs
- DoubleAnimationUsingPath.cs
- DynamicResourceExtensionConverter.cs
- DocumentGridPage.cs
- TableColumn.cs
- WebErrorHandler.cs
- DataContext.cs
- QueryRewriter.cs
- SqlServer2KCompatibilityCheck.cs
- TextDecoration.cs
- VirtualPathProvider.cs
- WorkflowNamespace.cs
- Translator.cs
- Int32RectConverter.cs
- BufferBuilder.cs
- MessageQueueEnumerator.cs
- Baml2006ReaderContext.cs
- DrawingVisualDrawingContext.cs
- BaseDataBoundControl.cs
- ContentElement.cs
- QueryPageSettingsEventArgs.cs
- DbConnectionPoolGroupProviderInfo.cs
- ErrorReporting.cs
- VectorAnimationBase.cs
- DataGridItem.cs
- DataTableMapping.cs
- XhtmlBasicTextBoxAdapter.cs
- DashStyles.cs
- AdjustableArrowCap.cs
- HtmlEncodedRawTextWriter.cs
- ComplusEndpointConfigContainer.cs
- Missing.cs
- ResourceIDHelper.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- ADConnectionHelper.cs
- ControlBindingsCollection.cs
- StatusBar.cs
- UnsafeNativeMethods.cs
- SafeEventHandle.cs
- Cursor.cs
- CdpEqualityComparer.cs
- XmlUtil.cs
- SqlDataReaderSmi.cs
- ExtensionFile.cs
- Int64.cs
- FontFamily.cs
- RijndaelManaged.cs
- XmlChoiceIdentifierAttribute.cs
- HttpDictionary.cs
- XmlILTrace.cs
- UpdatePanelTriggerCollection.cs
- SystemGatewayIPAddressInformation.cs
- WorkflowDesignerColors.cs
- TemplatedWizardStep.cs
- FactoryId.cs
- PreservationFileWriter.cs
- ResourceReferenceExpressionConverter.cs
- ProxyElement.cs
- ItemsPanelTemplate.cs
- DataGridViewCellConverter.cs
- StructuralObject.cs
- ArcSegment.cs
- DeleteWorkflowOwnerCommand.cs
- XamlToRtfWriter.cs
- HtmlEmptyTagControlBuilder.cs
- TextElementEditingBehaviorAttribute.cs
- UserPersonalizationStateInfo.cs
- MDIControlStrip.cs
- MatrixTransform.cs
- AnnotationDocumentPaginator.cs
- RegisteredDisposeScript.cs
- CompositeFontFamily.cs
- ToolStripDropDownClosedEventArgs.cs
- XmlMapping.cs
- ApplicationSettingsBase.cs
- CookielessHelper.cs