Code:
/ 4.0 / 4.0 / 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. // ==++== // // 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
- UTF8Encoding.cs
- SqlVisitor.cs
- InputElement.cs
- X509UI.cs
- WebRequest.cs
- DataGridPreparingCellForEditEventArgs.cs
- base64Transforms.cs
- ColorKeyFrameCollection.cs
- InfoCardX509Validator.cs
- NativeMethods.cs
- FlowDocumentView.cs
- AnnotationHighlightLayer.cs
- LinkTarget.cs
- RecommendedAsConfigurableAttribute.cs
- SignatureToken.cs
- SecurityUniqueId.cs
- RuleRefElement.cs
- ProgressChangedEventArgs.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- LicenseProviderAttribute.cs
- __ComObject.cs
- EntityDesignerBuildProvider.cs
- XmlSchemaComplexContent.cs
- ArgIterator.cs
- TextEditorTyping.cs
- SplineKeyFrames.cs
- GetImportFileNameRequest.cs
- DoubleAnimation.cs
- XmlNullResolver.cs
- ToolBarPanel.cs
- ProxyWebPart.cs
- Keyboard.cs
- SafeEventLogReadHandle.cs
- LineProperties.cs
- IntegerFacetDescriptionElement.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- RuntimeIdentifierPropertyAttribute.cs
- ButtonFlatAdapter.cs
- XsltException.cs
- DataBinding.cs
- ColumnResult.cs
- ComponentCommands.cs
- TypedCompletedAsyncResult.cs
- WhitespaceSignificantCollectionAttribute.cs
- SqlClientMetaDataCollectionNames.cs
- SrgsElementList.cs
- AssemblyInfo.cs
- PersonalizableAttribute.cs
- Encoding.cs
- XmlUtil.cs
- InternalBufferOverflowException.cs
- SQLStringStorage.cs
- ApplicationDirectory.cs
- BindToObject.cs
- PageCatalogPartDesigner.cs
- AnnotationService.cs
- TileBrush.cs
- PointCollectionConverter.cs
- DetailsViewUpdateEventArgs.cs
- EventBuilder.cs
- SortFieldComparer.cs
- XPathParser.cs
- Control.cs
- OleDbConnection.cs
- GroupedContextMenuStrip.cs
- ComplexBindingPropertiesAttribute.cs
- QuotedPairReader.cs
- TabControlCancelEvent.cs
- XmlWellformedWriterHelpers.cs
- BadImageFormatException.cs
- Vector3D.cs
- VectorAnimationUsingKeyFrames.cs
- EditorOptionAttribute.cs
- WebConfigurationManager.cs
- SQLByteStorage.cs
- VisualTreeHelper.cs
- GPRECTF.cs
- Visual3D.cs
- EventManager.cs
- CodeBlockBuilder.cs
- MailBnfHelper.cs
- XmlElementCollection.cs
- XmlCountingReader.cs
- SQLInt64.cs
- ProxyWebPartConnectionCollection.cs
- StreamWithDictionary.cs
- DataViewManager.cs
- CollectionsUtil.cs
- DateTimeConverter.cs
- DataGridColumnStyleMappingNameEditor.cs
- TreeNodeBindingCollection.cs
- HttpContext.cs
- SqlCrossApplyToCrossJoin.cs
- CallbackHandler.cs
- DataRelationCollection.cs
- DynamicDocumentPaginator.cs
- dtdvalidator.cs
- SymmetricKeyWrap.cs
- ChoiceConverter.cs
- QueryOperationResponseOfT.cs